java - 使用 Gradle 防止第 3 方库位于编译类路径上

标签 java dependencies gradle dependency-management

我有一个多项目 Gradle 构建。我有依赖于 Sub-Project-BSub-Project-ASub-Project-BSLF4J 具有编译时依赖性。我希望 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/

相关文章:

使用 vagrant 时出现 Ruby gem 依赖错误

android - 库 com.google.android.gms :play-services-basement is being requested by various other libraries at [[15. 0.1,15.0.1]],但解析为 16.0.1

android - 尝试添加包时出现错误 "duplicate entry: com/google/android/gms/internal/zzble.class"

java - jpa Embeddables 与实体的双向关系

java - AI——如何根据规则简洁生成所有可能的结果

build - Visual Studio Team Services 如何管理自定义或内部依赖项?

android - 警告 :Conflict with dependency 'com.android.support:support-annotations'

java - 如何有效地更新数据库中的实体?

java - 这个特定的 XML 文件中的 xmlns 是什么?

spring-boot - 从 Gradle 启动传递动态端口 :run of an application