如何分析传递依赖是否设置"changing"?



当前我的依赖项的行为有问题。似乎并不是所有的依赖项都被标记为"更改"。我试图使用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名开发人员可以处理。

最新更新