我有一个 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/