Maven 如何使用Gradle';s动态版本和避免Beta?

Maven 如何使用Gradle';s动态版本和避免Beta?,maven,junit,gradle,Maven,Junit,Gradle,我的身材上有这个。格雷德尔: testCompile(group: 'junit', name: 'junit', version: '4.+') 决议如下: junit:junit:4.+ -> 4.12-beta-1 我不想使用beta版本,但同时我想使用动态版本。 在这种情况下,我想依靠4.11 可能吗? 怎么做 注意:有maven的答案,但我不确定如何在Gradle中翻译。Gradle的动态版本目前不支持此类排除。您可以使用ComponentMeta设置状态: dependen

我的身材上有这个。格雷德尔:

testCompile(group: 'junit', name: 'junit', version: '4.+')
决议如下:

junit:junit:4.+ -> 4.12-beta-1
我不想使用beta版本,但同时我想使用动态版本。 在这种情况下,我想依靠4.11

可能吗? 怎么做


注意:有maven的答案,但我不确定如何在Gradle中翻译。Gradle的动态版本目前不支持此类排除。

您可以使用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')

现在Gealle不会认为你的beta是“释放”,因此它将不匹配4.12贝塔-1。不过,这不会让您只选择4.x版本,也就是说,5.2版本也适用。

这是我为自己的用例解决这个问题的方法。下面允许添加排除规则,在依赖项解析期间过滤候选项。 匹配正则表达式排除规则的候选项将被拒绝

这是Kotlin DSL,但如果转换为Groovy,可能也能正常工作

configurations.all {
    resolutionStrategy
        .componentSelection
        .all(object : Action<ComponentSelection> {
            @Mutate
            override fun execute(selection : ComponentSelection) {
                // Add exclusion rules here
                excludeSelectionByRegex(selection, "org\\.jetbrains.*", ".*", ".*-(eap|M).*")
                excludeSelectionByRegex(selection, "org\\.my-group.*", "my-module", ".*-beta")
            }
        })
}

fun excludeSelectionByRegex(selection: ComponentSelection, groupRegex: String, moduleRegex: String, versionRegex: String) {
    if (groupRegex.toRegex().matches(selection.candidate.group) &&
        moduleRegex.toRegex().matches(selection.candidate.module) &&
        versionRegex.toRegex().matches(selection.candidate.version)
    ) {
        selection.reject("Matched exclusion rule")
    }
}
configurations.all{
解决策略
.组件选择
.所有(目标:行动){
@变异
覆盖乐趣执行(选择:组件选择){
//在此处添加排除规则
excludeSelectionByRegex(选择“org\\\.jetbrains.*”、“*”、“*-(eap | M.*”)
excludeSelectionByRegex(选择“组织\\.my group.*”、“我的模块”、“测试版”)
}
})
}
fun excludeSelectionByRegex(选择:ComponentSelection,groupRegex:String,moduleRegex:String,versionRegex:String){
if(groupRegex.toRegex().matches(selection.candidate.group)&&
moduleRegex.toRegex().matches(selection.candidate.module)&&
versionRegex.toRegex().matches(selection.candidate.version)
) {
选择。拒绝(“匹配排除规则”)
}
}

可能重复我想知道是否可以手动触发组件元数据处理程序并继续使用+符号。也许再多一点DSL-y
。所有{if(candidate.version.contains(“-M”))拒绝(“无里程碑版本”)}