在build.gradle中,我正在通过单个脚本为雄猫和野蝇构建WAR。Wildfly提供了对"javax.mail:mail:1.4.7"的依赖。但是雄猫缺少这个罐子。所以我总是把这个罐子添加到${CATALINA_HOME}/lib/。目前,我正在尝试从它们迁移到Amazon AWS Elastic Beanstalk,我不想弄乱${CATALINA_HOME}/lib/。如何为野蝇编写通用的 gradle 脚本:
dependencies {
....
providedCompile group: 'javax.mail', name: 'mail', version: '1.4.7'
providedCompile group: 'javax.activation', name: 'activation', version: '1.1.1'
...
}
对于雄猫,具有:
dependencies {
...
compile group: 'javax.mail', name: 'mail', version: '1.4.7'
compile group: 'javax.activation', name: 'activation', version: '1.1.1'
...
}
我不是 gradle 的专家。
@RaGe解决了我的问题。下面的代码是"42"数字的最终解决方案。
configurations {
tomcatLibs
}
dependencies {
...
providedCompile group: 'javax.mail', name: 'mail', version: '1.4.7' //provided for wildfly
providedCompile group: 'javax.activation', name: 'activation', version: '1.1.1' //provided for wildfly
tomcatLibs group: 'javax.mail', name: 'mail', version: '1.4.7' //only for tomcat
tomcatLibs group: 'javax.activation', name: 'activation', version: '1.1.1' //only for tomcat
providedCompile group: 'javax.mail', name: 'javax.mail-api', version: '1.5.0'
....
}
//default war for wildfly
war {
....
}
task createTomcatWar(type: War, dependsOn: classes) {
archiveName = 'app-tomcat.war';
classpath configurations.tomcatLibs // adds a configuration to the WEB-INF/lib dir
}
....
添加一个额外的配置来保存范围更改的依赖项:
configurations {
optLibs
}
将依赖项添加到刚刚创建的配置中:
dependencies{
...
optLibs 'javax.mail:mail:1.4.7'
optLibs 'javax.activation:activation:1.1.1'
compile 'foo'
runtime 'bar'
...
providedCompile.extendsFrom(optLibs)
}
现在对于一个与 optLibas 建立战争的任务,compile
:\
task createTomcatWar(type: War, dependsOn: classes) {
baseName = 'app-wildfly'
destinationDir = file("$buildDir/dist")
classpath = configurations.optLibs //This should include optLibs jars in WEB-INF/lib
}
标准的战争任务在没有包含 optLibs 的情况下构建了一场战争,因此这可以是您的野蝇战争,您不需要另一个显式任务。如果您希望自定义任务在每次构建时自动运行,还可以添加到 build.gradle 的根级别:
assemble.dependsOn createTomcatWar