我正在从Maven转换一个非常大的版本。我已将许多BOM转换为依赖列表。我也使用Spring Dependency管理插件。
问题在于依赖管理是永远的。请注意,即使我使用--offline
,它似乎也会花费太长时间。我还读到使用allprojects {}
和subprojects{}
导致并行失败。显然,我需要提供类似功能的东西。首先,这次迁移的目的是提高性能,但到目前为止我还没有想到它会更好。我需要知道:
如何在配置阶段设置我的依赖关系列表,只执行一次并确定范围,以便所有项目都可以使用这些信息?有一个插件的例子吗?当然,它必须与并行性一起工作。
我是否需要使用可提高性能的Spring依赖管理插件?
现在,构建时间大约是25分钟(离线运行),我在一个中等体面的8核盒子上。这是守护进程运行而没有单元或集成测试。 : - /
答案 0 :(得分:1)
如果不了解更多有关您的环境或设置的信息,很难说。但是一些一般规则:
您确定依赖解决方案是问题所在,请使用--profile获取更多信息。 (see docs)
确保您只有一个存储库可供查看,最好是靠近您并快速查看。我们通常在Nexus中设置代理,这样我们就可以让Nexus缓存整个部门。对于每个新的存储库,Gradle也会在那里查找所有版本。
确保您的Gradle缓存速度很快(想想本地SSD与NFS挂载的旧磁盘)。否则将$ GRADLE_USER_HOME移动到另一个本地。
添加DependencyResolutionListener可以为您提供有关可能是瓶颈的更多信息。
尝试将以下内容添加到build.gradle的开头:
gradle.addListener(new DependencyResolutionListener() {
ThreadLocal<Long> start = new ThreadLocal<>()
@Override
void beforeResolve(ResolvableDependencies dependencies) {
start.set(System.nanoTime())
}
@Override
void afterResolve(ResolvableDependencies dependencies) {
long stop = System.nanoTime() - start.get()
println "resolving $dependencies.resolutionResult.root.moduleVersion of configuration $dependencies.name (${stop/1000000} ms)"
}
})