繁体   English   中英

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

[英]Creating Java library - add Gradle dependency for testing, but don't include it in compiled library (or make it overridable)

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

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

我认为也许可以使用Gradle Default依赖项 ,但是它根本不提供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"

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

我不知道这是否可能,因为那不是依赖关系的工作方式。 Maven传递依赖项对此问题做了一些解释。

例如,您制作了一个库并使用了给定的RxJava版本,例如vn 这implictly意味着你的LIB使用的一些功能vn是不存在的vn-1希望不会被弃用vn+1及更高版本。 如果lib客户端能够选择任何RxJava版本,则它可以任意选择vn-1并且您的代码将无法工作。 您对vn有严格的依赖性,使用库的任何人都应该意识到这一点。

在lib的build.gradle中提供显式依赖关系没有问题。 实际上,列出依赖关系将有助于Gradle解决依赖关系图,处理冲突以及所有问题。 以下是Gradle的工作: https : //docs.gradle.org/current/dsl/org.gradle.api.artifacts.ResolutionStrategy.html

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM