Java Gradle:maven发布具有依赖版本范围

Java Gradle:maven发布具有依赖版本范围,java,maven,gradle,pom.xml,dependency-management,Java,Maven,Gradle,Pom.xml,Dependency Management,我正在开发一个依赖于kotlin stdlib。为了尽量减少对实现我的库的项目的影响,我尝试在已发布的maven pom文件中使用一个版本范围: <dependency> <groupId>org.jetbrains.kotlin</groupId> <artifactId>kotlin-stdlib</artifactId> <version>[1.1.2,2.0)</version> <

我正在开发一个依赖于
kotlin stdlib
。为了尽量减少对实现我的库的项目的影响,我尝试在已发布的maven pom文件中使用一个版本范围:

<dependency>
  <groupId>org.jetbrains.kotlin</groupId>
  <artifactId>kotlin-stdlib</artifactId>
  <version>[1.1.2,2.0)</version>
  <scope>compile</scope>
</dependency>
如果我使用
[1.1.2]
或软需求
1.1.2
,似乎并不重要

$ ./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 (*)
如果我在android项目中使用我的lib,它会失败:

应用程序(1.1.3-2)和测试应用程序(1.1.4-3)的解析版本不同。有关详细信息,请参阅

建议的解决方案是在实施项目中添加解决规则,例如

configurations.all {
    resolutionStrategy {
        force "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
    }
}
然而,我不想把这强加给用户,而是希望我的lib

  • 使用项目中可用的任何版本,只要它与我定义的范围相匹配
    [1.1.2,2.0)
  • 如果项目未使用kotlin stdlib,请使用与我的范围匹配的最高版本
  • 如果项目依赖项版本与我的库不匹配,则失败

我能为我的库做些什么来实现这一点吗?

我建议不要在分布式pom文件中使用版本范围。只使用固定版本,如
1.1.2
。如果用户需要,他可以决定使用不同的版本,并在Maven pom或通过Gradle覆盖它。但是使用版本范围会使每个构建的版本变得不可预测。我无法记录ommend.@khmarbaise我的目标是让一个实施项目定义要使用的版本,而不需要像
resolutionStrategy
这样的额外代码,从而使其可预测。如果gradle愿意遵守一个定义良好的版本范围,那么我可以让travis验证该范围内的功能,从而使我的库可预测。使用固定或版本范围似乎没有任何区别,gradle仍然可以选择另一个版本。我建议不要在分布式pom文件中使用版本范围。只使用固定版本,如
1.1.2
。如果用户需要,他可以决定使用不同的版本,并在Maven pom或通过gradle覆盖它。但是使用版本范围会使每个构建的pom文件都不受影响ctable..我不能推荐。@khmarbaise我的目标是让一个实现项目定义要使用的版本,而不需要像
ResolutionsStrategy
这样的额外代码,从而使其可预测。如果gradle尊重一个定义良好的版本范围,那么我可以让travis验证该范围内的功能,从而使我的库可预测.使用固定或版本范围似乎没有任何区别,gradle仍然可以选择其他版本