雄猫和野蝇的战争依赖关系同时存在



在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

最新更新