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

用法

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

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

项目布局

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

src/main/webapp

Web 应用程序源代码

任务

War 插件添加并修改了以下任务

warWar

依赖于: compile

组装应用程序 WAR 文件。

assemble - 生命周期任务

依赖于: war

War 插件将以下依赖项添加到 Java 插件添加的任务中;

warPluginTasks
图 1. War 插件 - 任务

依赖管理

War 插件添加了两个依赖配置

providedCompile

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

providedRuntime

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

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

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

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

发布

components.web

一个 SoftwareComponent,用于 发布war 任务创建的生产 WAR。

约定属性(已弃用)

webAppDirName — String

默认值: src/main/webapp

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

webAppDir — (只读) File

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

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

这些属性由 WarPluginConvention 对象提供。

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

War

War 任务的默认行为是将 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 配置。