如何分析是否设置了传递依赖关系"更改"?

时间:2015-12-03 08:41:41

标签: gradle dependencies

目前我的依赖行为存在问题。似乎并非所有依赖项都被标记为"更改"需要的。我尝试使用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'是没有选择(但有效)。但对于我们的驻外办事处,使用此参数的延迟非常高。有时这将是每个构建几分钟。

1 个答案:

答案 0 :(得分:0)

问题早就解决了。我认为这个问题出现在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次删除依赖性discriptor文件夹,同时有大约100名开发人员可以处理。