当前我的依赖项的行为有问题。似乎并不是所有的依赖项都被标记为"更改"。我试图使用build.gradle脚本来验证这一点。对于直接依赖项,检查很简单。
configurations.all {
incoming.beforeResolve {
it.dependencies.each { dep ->
if ( dep.getVersion()?.endsWith( '-SNAPSHOT' ) ) {
println dep
println dep.isChanging()
}
}
}
}
通过这种方式,我注意到SNAPSHOT没有标记为"更改"。现在我不确定传递依赖项的行为。但是我无法通过在解析之前访问API来获得传递依赖关系。
使用gradle参数"--refresh dependencies"不是选项(但有效)。但对于我们的外部办公室来说,使用此参数的延迟非常高。有时,每次构建需要几分钟时间。
问题不久前就解决了。我认为问题出在等级依赖描述符管理的某个地方。
在大多数情况下,是什么解决了这个问题?
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名开发人员可以处理。