War 插件扩展了 Java 插件,增加了组装 Web 应用程序 WAR 文件的支持。它禁用了 Java 插件默认的 JAR 存档生成,并添加了一个默认的 WAR 存档 Task。

用法

要使用 War 插件,请在构建脚本中包含以下内容

build.gradle.kts
plugins {
    war
}
build.gradle
plugins {
    id 'war'
}

项目布局

除了标准 Java 项目布局外,War 插件还增加了

src/main/webapp

Web 应用程序源文件

Task

War 插件添加和修改了以下 Task

warWar

依赖于compile

组装应用程序 WAR 文件。

assemble - 生命周期 Task

依赖于war

War 插件为 Java 插件添加的 Task 增加了以下依赖项;

warPluginTasks
图 1. War 插件 - Task

依赖管理

War 插件增加了两种依赖配置

providedCompile

此配置应用于编译所需但由部署 WAR 的环境提供的依赖项。在此声明的依赖项对于 maintest 编译类路径可见。

providedRuntime

此配置应应用于运行时所需但由部署 WAR 的环境提供的依赖项。在此声明的依赖项仅对于 maintest 运行时类路径可见。

重要的是要注意,这些 provided 配置是传递性的。

假设您将 commons-httpclient:commons-httpclient:3.0 添加到任何 provided 配置中。此依赖项依赖于 commons-codec。因为这是一个 "provided" 配置,这意味着这两个依赖项都不会添加到您的 WAR 中,即使 commons-codec 库是您 implementation 配置的显式依赖项。

如果您不希望这种传递性行为,只需像 commons-httpclient:commons-httpclient:3.0@jar 这样声明您的 provided 依赖项即可。

发布

components.web

一个 SoftwareComponent,用于发布war Task 创建的生产环境 WAR。

约定属性(已弃用)

webAppDirName — String

默认值src/main/webapp

Web 应用程序源目录的名称,相对于项目目录。

webAppDir — (只读)File

默认值$webAppDirName,例如 src/main/webapp

Web 应用程序源目录的路径。

这些属性由 WarPluginConvention 对象提供。

通过约定属性配置 war Task 已被弃用。如果需要为 war Task 设置默认值,请直接配置该 Task。如果想配置项目中所有类型为 War 的 Task,请使用 tasks.withType(War.class).configureEach(…​)

War

War Task 的默认行为是将 src/main/webapp 的内容复制到存档的根目录。您的 webapp 目录当然可能包含一个 WEB-INF 子目录,其中可能包含 web.xml 文件。您的编译类文件被编译到 WEB-INF/classesruntime [1] 配置的所有依赖项都被复制到 WEB-INF/lib

API 文档中的 War 类包含更多有用信息。

自定义

以下是一个包含最重要自定义选项的示例

build.gradle.kts
repositories {
    mavenCentral()
}

dependencies {
    providedCompile("javax.servlet:servlet-api:2.5")
}

tasks.war {
    webAppDirectory = file("src/main/webapp")
    from("src/rootContent") // adds a file-set to the root of the archive
    webInf { from("src/additionalWebInf") } // adds a file-set to the WEB-INF dir.
    webXml = file("src/someWeb.xml") // copies a file to WEB-INF/web.xml
}
build.gradle
repositories {
    mavenCentral()
}

dependencies {
    providedCompile "javax.servlet:servlet-api:2.5"
}

war {
    webAppDirectory = file('src/main/webapp')
    from 'src/rootContent' // adds a file-set to the root of the archive
    webInf { from 'src/additionalWebInf' } // adds a file-set to the WEB-INF dir.
    webXml = file('src/someWeb.xml') // copies a file to WEB-INF/web.xml
}

当然,可以使用闭包配置不同的文件集,以定义排除和包含项。


1. runtime 配置扩展了 compile 配置。