【gradle插件系列】War插件用法详解
使用
要使用War插件,请在构建脚本中包含以下内容:
plugins {
id 'war'
}
War插件扩展了Java插件,以支持组装Web应用程序WAR文件。它禁用了Java插件的默认JAR存档生成,并添加了一个默认的WAR存档任务。
项目布局
除了标准的Java项目布局外,War插件还添加了:
- src/main/webapp:Web应用程序源代码
任务
War插件添加和修改了以下任务:
- war:依赖于compile。组装应用程序WAR文件。
- assemble:生命周期任务,依赖于war。
War插件向Java插件添加了以下任务依赖:
- warPluginTasks
依赖管理
War插件添加了两个依赖配置:
- providedCompile:此配置应该用于在编译时需要但由部署WAR的环境提供的依赖项。在主类路径和测试类路径上可见的依赖项应该在此处声明。
- providedRuntime:此配置应该用于在运行时需要但由部署WAR的环境提供的依赖项。仅在主类路径和测试运行时类路径上可见的依赖项应该在此处声明。
重要的是要注意,这些provided配置具有传递性。假设您将commons-httpclient:commons-httpclient:3.0添加到提供的配置中。此依赖项依赖于commons-codec。因为这是一个"provided"配置,这意味着即使commons-codec库是您实现配置的显式依赖项,也不会将这两个依赖项都添加到WAR中。如果您不希望有这种传递行为,只需像commons-httpclient:commons-httpclient:3.0@jar这样声明提供的依赖项。
发布
- components.web:用于发布war任务创建的生产WAR的SoftwareComponent。
约定属性(已弃用)
- 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/classes目录中。运行时[1]配置的所有依赖项都会被复制到WEB-INF/lib目录中。
API文档中的War类提供了其他有用的信息。
自定义
以下是最重要的自定义选项示例:
configurations {
moreLibs
}
repositories {
flatDir { dirs "lib" }
mavenCentral()
}
dependencies {
implementation module(":compile:1.0") {
dependency ":compile-transitive-1.0@jar"
dependency ":providedCompile-transitive:1.0@jar"
}
providedCompile "javax.servlet:servlet-api:2.5"
providedCompile module(":providedCompile:1.0") {
dependency ":providedCompile-transitive:1.0@jar"
}
runtimeOnly ":runtime:1.0"
providedRuntime ":providedRuntime:1.0@jar"
testImplementation "junit:junit:4.13"
moreLibs ":otherLib:1.0"
}
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.
classpath fileTree('additionalLibs') // adds a file-set to the WEB-INF/lib dir.
classpath configurations.moreLibs // adds a configuration to the WEB-INF/lib dir.
webXml = file('src/someWeb.xml') // copies a file to WEB-INF/web.xml
}
当然,可以使用闭包来配置不同的文件集,以定义排除和包含规则。