我有一个多项目 Gradle 构建。我有依赖于 Sub-Project-B
的 Sub-Project-A
。 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。
由于这很难工作,我想我一定做错了什么,但这感觉并不是一个不合理的设置。我只希望我的构建中的子项目之一能够在编译时访问第三方库。
最佳答案
我认为您需要排除它,然后重新包含它。我看不出有什么方法可以一步完成此操作。
对 erdi's solution 稍作修改,您可以将 B 的整个依赖项重新包含在 A 的运行时配置中:
dependencies {
compile(project(':A')) {
exclude group: 'org.slf4j'
}
runtime project(':A')
}
这有点重复。
关于java - 使用 Gradle 防止第 3 方库位于编译类路径上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16046273/