如何解决如何为仅受约束的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 举报,一经查实,本站将立刻删除。