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