【问题标题】:Build an EAR with Gradle sharing dependencies between WARs使用 Gradle 在 WAR 之间共享依赖项构建 EAR
【发布时间】:2020-04-07 17:44:38
【问题描述】:

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

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

war1 和 war2 都依赖于 jar1 和 jar2。 jar1 和 jar2 模块依赖于第三方库(由 mavenCentral 托管),我们称之为 third-party1.jar 和 third-party2.jar。 war1 和 war2 也依赖于 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 插件文档根本没有解释这一点,这在我看来是最常见的模式。

【问题讨论】:

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


    【解决方案1】:

    所以我想我终于想通了:

    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')
    }
    

    这样我们得到wars在.ear归档的根目录下,earshared的依赖放在/lib目录下。

    jar1 和 jar2 工件及其依赖项也放在 /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 }
    }
    

    而 jars 的 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'
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-05
      • 2019-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-10
      • 2019-08-24
      • 1970-01-01
      相关资源
      最近更新 更多