有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java构建了一个EAR,其中Gradle共享战争之间的依赖关系

我有一个像这样的JavaEE项目

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

{}和{}都依赖于{}和{}。 jar1jar2模块依赖于第三方库(由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) 个答案

  1. # 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')
    }
    

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

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

    earshared是wars构建的自定义配置。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 }
    }
    

    当罐子盖起来的时候。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'
    }