使用Gradle在WAR之间共享依赖关系构建EAR

时间:2020-04-07 17:44:38

标签: java gradle jakarta-ee build.gradle ear

我有一个像这样的java-ee项目

/project/war1/build.gradle
/project/war2/build.gradle
/project/jar1/build.gradle
/project/jar2/build.gradle
/project/ear/build.gradle

war1war2都取决于jar1jar2jar1jar2模块依赖于第三方库(由mavenCentral托管),我们将其称为third-party1.jarthird-party2.jarwar1war2也依赖于我想在它们之间共享的third-party3.jar库。

我期望的是像这样的ear

META-INF/MANIFEST.MF
META-INF/application.xml
war1.war
war2.war
lib/jar1.jar
lib/jar2.jar
lib/third-party1.jar
lib/third-party2.jar
lib/third-party3.jar

这是正确的吗?如何使用Gradle实现此目的? gradle ear插件文档完全没有解释这一点,在我看来,这是最常见的模式。

1 个答案:

答案 0 :(得分:0)

所以我想我终于明白了:

ear/build.gradle应该是这样的:

plugins {
    id 'java'
    id 'ear'
}

dependencies {
    /* jars */
    earlib project(path: ':jar1')
    earlib project(path: ':jar1', configuration: 'compile')

    earlib project(path: ':jar2')
    earlib project(path: ':jar2', configuration: 'compile')

    /* wars */
    deploy project(path: ':war1', configuration: 'archives')
    earlib project(path: ':war1', configuration: 'earshared')

    deploy project(path: ':war2', configuration: 'archives')
    earlib project(path: ':war2', configuration: 'earshared')
}

通过这种方式,我们将war保存在.ear档案的根目录中,并将earshared依赖项放在/lib目录下。

jar1jar2工件及其依赖项也放在/lib

earshared是自定义配置,wars的build.gradle如下所示:

configurations {
    earshared
}

apply plugin: 'war'

jar.enabled = true

description = 'war1'
dependencies {
    providedCompile project(':jar1')
    providedCompile project(':jar2')
    earshared group: 'org.example', name: 'third-party3', version:'1.0.0'
}

sourceSets { 
    main {  compileClasspath += configurations.earshared }
}

罐子的build.gradle看起来像这样:

description = 'jar1'

dependencies {
    compile group: 'org.example', name: 'third-party1', version:'2.6.0'
    compile group: 'org.example', name: 'third-party2', version:'2.6.0'
}