Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Gradle构建具有可传递依赖项的多模块项目_Java_Gradle - Fatal编程技术网

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

Java Gradle构建具有可传递依赖项的多模块项目,java,gradle,Java,Gradle,我在构建我的简单应用程序时遇到问题。它包含3个模块:ejb、rest和ear,其中应包括rest。为了实现它,我在下面编写了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。这不是我想要的东西,所以我试着解决这个问题。我在网上找到了两种方法,但都不管用。标签

我在构建我的简单应用程序时遇到问题。它包含3个模块:ejb、rest和ear,其中应包括rest。为了实现它,我在下面编写了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的第一个注释将所有rest依赖项排除在lib dir之外。第二个标签2也做了同样的事情,但在lib中也包含了rest-1.0.jar,这使得情况更加糟糕。 现在我不知道如何编写build.gradle,所以它将子项目生成的JAR放在根目录中,将它们的依赖项放在lib目录中。我也尝试过用标签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'
        }
    }
}

您是否尝试过排除模块:“EJB”而不是排除项目:“EJB”?无论我使用的是排除项目还是模块。我仍然得到以下异常。找不到参数[org.gradle.api.internal.artifacts]的方法exlude。ProjectBackedModule@4006c95c]在DefaultProjectDependency上{dependencyProject='project':rest,configuration='default'}。