use*_*607 5 parallel-processing configuration groovy gradle
我正在从 Maven 转换一个非常大的构建。我已将许多 BOM 转换为依赖项列表。我还使用 Spring 依赖管理插件。
问题是依赖管理需要很长时间。请注意,即使我使用--offline. 我还刚刚读到使用allprojects {}andsubprojects{}会导致并行性失败。不过,显然我需要提供类似功能的东西。这次迁移的首要目标是提高性能,但到目前为止我认为没有任何改善。我需要知道:
如何在配置阶段设置依赖项列表,仅执行一次并确定其范围以便信息可供所有项目使用?有一个插件的例子可以做到这一点吗?当然,它必须与并行性一起工作。
我需要对 Spring 依赖管理插件做些什么来提高性能吗?
现在,构建时间大约为 25 分钟(离线运行),而且我使用的是一个还算不错的 8 核盒子。这是在守护进程运行的情况下进行的,没有单元或集成测试。:-/
如果不了解更多关于您的环境或设置的信息,很难说。但有一些一般规则:
您确定问题在于依赖项解析吗,请使用 --profile 获取更多信息。(参见文档)
确保您只有一个存储库可供查看,最好是靠近您且速度快。我们通常会在 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)"
}
})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1467 次 |
| 最近记录: |