java - 创建 Java 库 - 添加 Gradle 依赖项以进行测试,但不要将其包含在编译库中(或使其可重写)

标签 java android gradle

我有一个 Android 项目,我计划将其组件之一制作为库。这将是一个 Java 库 (jar),因为那里不需要 android 依赖项。

问题是这个库依赖于 RxJava。但我希望它依赖于库客户端将使用的 RxJava 版本,而不是由我在库的 build.gradle 中明确提供。

我想也许 Gradle Default dependencies这将是一种可行的方法,但它根本不提供 RxJava 依赖项,并且不会构建库模块。

我的build.gradle:

apply plugin: 'java'

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
}

configurations.all {
    pluginTool {
        defaultDependencies { dependencies ->
            dependencies.add(this.project.dependencies.create("io.reactivex:rxjava:1.1.0"))
        }
    }
}

sourceCompatibility = "1.7"
targetCompatibility = "1.7"

最佳答案

The problem is that this library depends on RxJava. But I would like it to be dependent on the RxJava version which the library client will use, no to be explicitly provided by me in the library's build.gradle.

我不知道这是否可能,因为这不是依赖关系的工作方式。 Maven Transitive Dependencies稍微解释一下这个问题。

例如,您创建了一个库并使用了给定版本的 RxJava,例如 vn 。这隐含地意味着您的库使用了 vn 的某些功能vn-1 中不存在的希望不会在 vn+1 中被弃用然后。如果 lib 客户端能够选择任何 RxJava 版本,它可以任意选择 vn-1并且您的代码将无法工作。您对vn有严重依赖任何使用您的库的人都应该意识到这一点。

在您的库的build.gradle中提供显式依赖关系没有问题。 。事实上,列出依赖项将帮助 Gradle 解决依赖关系图、处理冲突等一切。以下是 Gradle 的一些功能:https://docs.gradle.org/current/dsl/org.gradle.api.artifacts.ResolutionStrategy.html

最后,即使您找到一种方法来实现对 lib 客户端的依赖项委托(delegate),应用程序也可能在运行时崩溃。

关于java - 创建 Java 库 - 添加 Gradle 依赖项以进行测试,但不要将其包含在编译库中(或使其可重写),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40306094/

相关文章:

java - Java 中的完成处理程序?

java - 缺少依赖项版本 - io.vertx :vertx-stack-depchain:jar is missing 为 'dependencies.dependency.version'

java - 编译器合规级别与父类(super class)覆盖

java - 使用 PagerTitleStrip 均匀分布标题

android - Android依赖项 'com.android.support:support-core-utils'对于编译(27.1.1)和运行时(28.0.0)具有不同的版本

android - 设备支持但apk只支持armeabi-v7 x86是什么原因?

java - HashMap 的 XMLAdapter

java - 如何将 SHA1 输出转换为十六进制字符串?

android - 可以用选择器绘制吗?

android - 将测试文件夹添加到类路径中以获得特定的gradle风格