2

我有一个多项目 Gradle 构建。我有Sub-Project-A这取决于Sub-Project-BSub-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。

由于这很难开始工作,我认为我一定做错了什么,但这并不像是一个不合理的设置。我只希望我的构建中的一个子项目能够在编译时访问第 3 方库。

4

2 回答 2

4

我认为您需要排除它,然后重新包含它。我看不出有任何方法可以一步完成。

作为对erdi 解决方案的轻微修改,您可以在 A 的运行时配置中重新包含 B 的整个依赖项:

dependencies {
    compile(project(':A')) {
        exclude group: 'org.slf4j'
    }
    runtime project(':A')
}

那是少一点重复。

于 2013-04-18T12:13:30.363 回答
3

在定义对 Sub-Project-B 的依赖项时,您可能应该排除 slf4j 依赖项,然后将 slf4j 依赖项添加到运行时配置:

dependencies {
    compile(project(':Sub-Project-B')) {
        exclude group: 'org.slf4j'
    }
    runtime 'org.slf4j:...:...'
}
于 2013-04-18T11:40:03.110 回答