rootProject:创建战争
子项目foo
apply plugin: 'java-libarary
dependencies {
compileOnly group: 'javax.servlet', name: 'javax.servlet-api', version: '3.0.1'
}
子项目栏
apply plugin: 'java-libarary
dependencies {
compile project(':foo')
compileOnly group: 'javax.servlet', name: 'javax.servlet-api', version: '3.0.1'
}
有没有办法不在javax.servlet-api上添加两次相同的依赖项? 项目foo的一些compileOnly依赖项需要添加到项目栏中,但它不应该在战争中。需要像以下配置:
apiCompileOnly
答案 0 :(得分:0)
如果您需要apiCompileOnly
之类的配置,则无法阻止您创建一个。
configurations {
apiCompileOnly
}
或
configurations.create('apiCompileOnly')
或者您可以将其从war
war {
rootSpec.exclude('**/javax.servlet-api-*.jar')
}
您可以通过subprojects
build.gradle
在每个子项目中包含依赖项
subprojects {
dependencies {
compileOnly group: 'javax.servlet', name: 'javax.servlet-api', version: '3.0.1'
}
}
你也说过
项目foo的一些compileOnly依赖项需要添加到项目栏中,但它不应该在战争中。
然后在这种情况下,subprojects
闭包不再那么方便了。
你可以添加那里所有子项目共有的依赖项,以及特定项目中的特定项目,但请记住传递,因为如果不这样禁用它,project
依赖项将带来传递:
compile (project(':foo')){transitive=false}
或者您可以搜索您感兴趣的项目,并在其他答案中添加您需要的内容@ToYonos
sugested
答案 1 :(得分:0)
在根项目build.gradle
中添加:
apply plugin: 'java-libarary'
subprojects {
compileOnly group: 'javax.servlet', name: 'javax.servlet-api', version: '3.0.1'
}
或者
apply plugin: 'java-libarary'
subprojects.findAll { ['foo', 'bar'].contains(it.name) }.each {
compileOnly group: 'javax.servlet', name: 'javax.servlet-api', version: '3.0.1'
}
答案 2 :(得分:0)
任何人都在寻找一种方法来允许您的库或模块的使用者使用 compileOnly 依赖项(而不必在消费模块中重新声明它们),现在有 compileOnlyApi:https://docs.gradle.org/current/userguide/java_library_plugin.html#sec:java_library_configurations_graph
这允许将库的依赖放在使用它的任何模块的编译时类路径上:
子项目 foo
apply plugin: 'java-libarary
dependencies {
compileOnlyApi group: 'javax.servlet', name: 'javax.servlet-api', version: '3.0.1'
}
子项目栏现在可以在编译时访问 servlet 类,因为它导入项目 foo
apply plugin: 'java-libarary
dependencies {
compile project(':foo')
}