我有一个多项目Gradle构建。我Sub-Project-A
取决于Sub-Project-B
。 Sub-Project-B
对SLF4J
具有编译时依赖性。我不希望Sub-Project-A
能够针对任何SLF4J
库进行编译,但在运行时我确实希望Sub-Project-B
代码能够运行。
我认为我能做的是将编译时依赖项添加到Sub-Project-B然后添加:
configurations {
compile.exclude group: 'org.slf4j'
}
到子项目-A。这确实可以防止任何代码针对slf4j API进行编译,但它也会阻止slf4j库位于Sub-Project-A运行时,因此只要访问Sub-Project-B
的代码,我就会得到ClassNotFoundException。
由于这很难开始工作,我认为我必须做错事,但这并不像是一个不合理的设置。我只希望我的构建中的一个子项目能够在编译时访问第三方库。
答案 0 :(得分:4)
我认为您需要排除它然后重新包含它。我无法通过一个步骤看到任何方法。
作为erdi's solution的略微修改,您可以在A的运行时配置中重新包含B的所有依赖项:
dependencies {
compile(project(':A')) {
exclude group: 'org.slf4j'
}
runtime project(':A')
}
重复性稍差。
答案 1 :(得分:3)
在定义Sub-Project-B的依赖关系时,您应该排除slf4j依赖关系,然后将slf4j依赖关系添加到运行时配置中:
dependencies {
compile(project(':Sub-Project-B')) {
exclude group: 'org.slf4j'
}
runtime 'org.slf4j:...:...'
}