Gradle:具有依赖版本范围的maven-publish

时间:2017-09-10 15:43:40

标签: java maven gradle pom.xml dependency-management

我正在开发一个依赖于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>

根据test utilities lib

  

当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 不匹配,则
  • 失败

我能为lib做些什么吗?

0 个答案:

没有答案