如何分析是否设置了传递依赖"changing"?
How to analyse if transitive Dependency is set "changing"?
目前我的依赖行为有问题。似乎并非所有依赖项都标记为 "changing" 需要。我尝试使用 build.gradle 脚本来验证这一点。对于直接依赖项,检查很简单。
configurations.all {
incoming.beforeResolve {
it.dependencies.each { dep ->
if ( dep.getVersion()?.endsWith( '-SNAPSHOT' ) ) {
println dep
println dep.isChanging()
}
}
}
}
通过这种方式,我注意到例如快照没有标记 "changing"。现在我不确定传递依赖项的行为方式。但是我无法通过在解析之前访问 API 来获取传递依赖项。
使用 gradle 参数 '--refresh-dependencies' 不是选项(但有效)。但对于我们的驻外办事处,使用此参数的延迟非常高。有时每次构建需要几分钟。
问题刚刚解决了。我认为问题出在 gradle 依赖描述符管理中。
大多数情况下是什么解决了问题?
allprojects {
configurations.all {
incoming.beforeResolve {
it.dependencies.each { dep ->
if ( dep.getVersion()?.endsWith( '-SNAPSHOT' ) ) {
if ( dep.metaClass.respondsTo( 'setChanging', Boolean ) ) {
dep.setChanging( true )
}
}
}
}
resolutionStrategy.cacheChangingModulesFor 0, 'seconds'
}
}
另一方面,有时问题仍然存在。但随后出现了一个问题,即 gradle 缓存目录中的描述符未正确更新(可能为工件计算出相同的哈希值)。
每月删除依赖描述符文件夹的次数少于 1 到 3 次,同时似乎可以处理约 100 名开发人员。
目前我的依赖行为有问题。似乎并非所有依赖项都标记为 "changing" 需要。我尝试使用 build.gradle 脚本来验证这一点。对于直接依赖项,检查很简单。
configurations.all {
incoming.beforeResolve {
it.dependencies.each { dep ->
if ( dep.getVersion()?.endsWith( '-SNAPSHOT' ) ) {
println dep
println dep.isChanging()
}
}
}
}
通过这种方式,我注意到例如快照没有标记 "changing"。现在我不确定传递依赖项的行为方式。但是我无法通过在解析之前访问 API 来获取传递依赖项。
使用 gradle 参数 '--refresh-dependencies' 不是选项(但有效)。但对于我们的驻外办事处,使用此参数的延迟非常高。有时每次构建需要几分钟。
问题刚刚解决了。我认为问题出在 gradle 依赖描述符管理中。
大多数情况下是什么解决了问题?
allprojects {
configurations.all {
incoming.beforeResolve {
it.dependencies.each { dep ->
if ( dep.getVersion()?.endsWith( '-SNAPSHOT' ) ) {
if ( dep.metaClass.respondsTo( 'setChanging', Boolean ) ) {
dep.setChanging( true )
}
}
}
}
resolutionStrategy.cacheChangingModulesFor 0, 'seconds'
}
}
另一方面,有时问题仍然存在。但随后出现了一个问题,即 gradle 缓存目录中的描述符未正确更新(可能为工件计算出相同的哈希值)。
每月删除依赖描述符文件夹的次数少于 1 到 3 次,同时似乎可以处理约 100 名开发人员。