我正在开发一个依赖于kotlin-stdlib
的{{3}}。为了对实现我的lib的项目产生最小的影响,我尝试在已发布的maven pom文件中使用版本范围:
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-stdlib</artifactId>
<version>[1.1.2,2.0)</version>
<scope>compile</scope>
</dependency>
当Maven遇到版本引用的多个匹配项时,它使用最高匹配版本
版本范围应允许gradle选择适合所有依赖项的版本。但是,在对其进行测试时,即使我的测试项目指定了kotlin-stdlib:1.1.2
,gradle也会为我的范围选择最高级别的版本。
$ ./gradlew example:dependencies
...
+--- org.jetbrains.kotlin:kotlin-stdlib:[1.1.2] -> 1.1.4-3
| \--- org.jetbrains:annotations:13.0
\--- se.lovef:kotlin-assert-utils:0.0-SNAPSHOT
+--- org.jetbrains.kotlin:kotlin-stdlib:[1.1.2,2.0) -> 1.1.4-3 (*)
如果我使用this [1.1.2]
或软要求1.1.2
,似乎无关紧要。
如果我在Android项目中使用我的lib失败:
app(1.1.3-2)和测试app(1.1.4-3)的已解决版本有所不同。有关详细信息,请参阅hard requirement。
建议的解决方案是在实施项目中添加解决方案规则,例如
configurations.all {
resolutionStrategy {
force "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
}
}
但是我不想强加于用户,而是希望我的lib
[1.1.2,2.0)
kotlin-stdlib
我能为lib做些什么吗?