如何为仅受约束的Gradle`platform`使用依赖项锁定? 解决方法

问题描述

我有一个Gradle(v6.6.1)platform模块,我已将该模块发布到我们的内部Maven存储库中。这是一个仅约束的平台,旨在供我的组织中的大量项目使用,以便我们可以标准化常见依赖项的版本。

到目前为止,它工作正常:我会定期检查每个依赖项以查找更新的发行版,在我的build.gradle.kts文件中更新这些版本,提高平台本身的版本号(主要还是次要,取决于更改) ),并将该新平台发布到Maven存储库。

但是,这样做是一个耗时且手动的过程。我宁愿在build.gradle.kts中指定我的版本范围约束(例如,最新的修补程序版本或最新的次要版本),然后使用dependency locking将每个依赖项的推荐版本更新为新的特定版本。

问题是,Gradle似乎禁止这样做。即使我使用以下内容,也只会产生一个空的api.lockfile

dependencyLocking {
    lockAllConfigurations()
}
task("resolveAndLockAll") {
    doFirst {
        require(gradle.startParameter.isWriteDependencyLocks,{ "You must specify `--write-locks` to update the dependency version lock" })
        configurations["api"].setCanBeResolved(true) // `api` not resolvable by default
    }
    doLast {
        configurations.forEach {
            println("Reviewing configuration ${it}...")
            if (it.isCanBeResolved && it.name != "archives" && it.name != "default") {
                it.resolve()
            }
        }
    }
}

dependencies {
    constraints {
        api("com.google.guava:guava:${ property("guavaVersion") }")
        api("com.google.inject:guice:${ property("guiceVersion") }")
        ... // many more
    }
}

我想我理解这背后的逻辑:我的平台仅发布约束(不发布依赖项),因此依赖项锁定不适用。但是,我想指定确切的约束条件,以允许消耗性项目从平台项目的发布到发布之间跳转,并向他们推荐确切的版本。

我也理解那些消耗项目的人可以使用依赖项锁定来获得可复制的构建(并且确实如此),但是我还是想指定确切的约束,以便我平台上的每个版本(例如17.4)都在使用完全相同的依存关系,他们可以协调所遇到的问题。

解决方法

我最好的主意是拥有第二个私有模块,该模块定义相同的依赖关系集(作为实际依赖关系),但具有更大的版本范围(例如,[1.1,2.0)而不是1.4.3) 。我可以使用该模块生成一个锁定文件,然后编写一个脚本,该脚本将使用新解决的特定依赖项版本来更新platform的{​​{1}}文件。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...