如何使用Gradle的动态版本并避免测试版?

时间:2014-07-28 12:43:46

标签: maven junit gradle

我在build.gradle上有这个:

testCompile(group: 'junit', name: 'junit', version: '4.+')

它解析为:

junit:junit:4.+ -> 4.12-beta-1

我不想使用测试版,但同时我想使用动态版。 在这种情况下,我想依赖4.11。

有可能吗? 怎么样?

注意:Maven "versions" plugin - how to exclude alpha/beta versions from reponse?有maven的答案,但我不确定如何在Gradle中翻译它。

3 个答案:

答案 0 :(得分:3)

您可以使用ComponentMeta设置状态:

dependencies {
   components {
     eachComponent { ComponentMetadataDetails details ->
         def version = details.id.version
         if (version.contains("beta") || version.contains("alpha")) {
             details.status = "milestone" // default in Gradle
         }
     }
   }
 }

然后使用您的依赖项的状态范围语法:

testCompile(group: 'junit', name: 'junit', version: 'latest.release')

现在Gradle不会将您的测试版视为“发布”,因此它与4.12-beta-1不匹配。这不会让你只选择4.x版本,即5.2版本也适用。

答案 1 :(得分:1)

Gradle的动态版本目前不支持此类排除。

答案 2 :(得分:0)

这是我为自己的用例解决此问题的方式。以下内容允许添加排除规则,以在相关性解决期间过滤候选对象。 符合正则表达式排除规则的候选人将被拒绝。

这是Kotlin DSL,但如果转换为Groovy,效果可能也一样。

GetEntryAssembly