繁体   English   中英

Gradle构建具有传递依赖项的多模块项目

[英]Gradle build multi modules project with transitive dependencies

我在构建简单的应用程序时遇到问题。 它包含3个模块,ejb,休息和耳朵,应在其中包括休息。 为此,我将build.gradle编写为以下内容之一。 但是我仍然有问题。 内置的耳朵看起来像:

ear-1.0.ear
|--ejbs-1.0.jar
|--rest-1.0.jar
|--lib
   |--ejbs-1.0.jar
   |--other libs..

如您所见,我在这里复制了ejbs-1.0.jar 我没有想要的东西,所以我尝试解决此问题。 我尝试了两种在网络上找到的方法,但都没有用。 第一个(带有标签1的注释)从lib dir中排除了所有rest依赖项。 第二个(标签2)做了同样的事情,但还把rest-1.0.jar包含在lib中,这使它更糟。 现在,我不知道如何编写build.gradle因此它将由子项目创建的jar放入根目录,并将其依赖项放入lib dir。 我也尝试用标签3编写类似注释的内容,但这会使脚本失败。 是否有简单的方法可以使用类似的语法将其排除在外?

project(":ejbs") {
    apply plugin: "java"

    dependencies {
        compile group: 'javax.ejb', name: 'javax.ejb-api', version: '3.2'
        compile group: 'org.apache.logging.log4j', name: 'log4j-api', version: '2.2'
        compile group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.2'
    }
}

project(":rest") {
    apply plugin: "java"

    dependencies {

        compile project(':ejbs')
        compile group: 'javax.ejb', name: 'javax.ejb-api', version: '3.2'
        compile group: 'javax.ws.rs', name: 'jsr311-api', version: '0.11'
        compile group: 'org.apache.logging.log4j', name: 'log4j-api', version: '2.2'
        compile group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.2'
    }
}

project(":ear") {
    apply plugin: "java"
    apply plugin: "ear"

    dependencies {
        //1: def nonTransitive = {transitive = false}
        deploy project(":ejbs")
        deploy project(":rest")
        earlib project(path:":ejbs", configuration:"compile")
        earlib project(path:":rest", configuration:"compile")//1: , nonTransitive
        //2: add('earlib', project(':rest')) {
        //    transitive = false
        //}
        //3: earlib project(path:":rest", configuration:"compile") {
        //    exlude project(':ejbs')
        //}
    }
}

我终于找到了解决方案。 我是这样写的:

project(":ear") {
    apply plugin: "java"
    apply plugin: "ear"

    dependencies {
        deploy project(":ejbs")
        deploy project(":rest")
        earlib project(path:":ejbs", configuration:"compile")
        earlib(project(path:":rest", configuration:"compile")) {
            exclude module: 'ejbs'
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM