【问题标题】:How to use Gradle's dynamic versions and avoid betas?如何使用 Gradle 的动态版本并避免 beta?
【发布时间】:2014-09-19 15:45:45
【问题描述】:

我的 build.gradle 上有这个:

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

解析为:

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

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

有可能吗? 怎么样?

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

【问题讨论】:

标签: maven junit gradle


【解决方案1】:

你可以使用 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 版本也适用。

【讨论】:

【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

    这是 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")
        }
    }
    

    【讨论】:

    • 也许多一点 DSL-y ... .all { if ( candidate.version.contains("-M") ) reject("no milestone version") }
    猜你喜欢
    • 2015-06-27
    • 1970-01-01
    • 2021-09-14
    • 1970-01-01
    • 2014-06-05
    • 2017-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多