Nic*_*zza 3 performance intellij-idea gradle
我有一个非常大的git项目,我有一个大的单个build.gradle定义子项目..在最初的几年......没问题.在最初几年之后,由于子项目的数量,它在Gradle命令行配置步骤中变得缓慢.
例如,当我运行gradle命令时,我看到暂停:
> Configuring > 0/77 projects >...
每个项目添加似乎都会暂停.
另一个大问题是当我去导入项目或使用intelliJ刷新gradle deps时,"分析依赖关系"需要很长时间才能真正延迟开发,因为我们需要在每次同步依赖项时都有相当大的等待.
人们通常会在这个领域做些什么来通过这个?我不得不吃掉那种痛苦的延迟.
人们通常会将build.gradle文件拆分为不相关的块,以便您获得多项目构建的网络吗?或者应该有办法让那不是那么慢?
但同样的问题是......
还有其他什么技巧?我的计划是将我的代码的主要部分分开并单独加载它们,以便gradle命令和intelliJ刷新是较小的UP-TO-DATE检查和配置设置.如果我们不必因为子项目限制而拆分build.gradle文件,那就太好了.
在我们对您的问题的评论进行讨论之后,很明显您不希望沿着将某些接口jar发布到存储库以删除某些子项目的路线.
鉴于此,这里有一些建议.我知道你已经尝试了其中的一些,但是这里有一些你上面没有提到的可能会对你有所帮助:
首先,尝试使用以下命令:
./gradlew {task} --dry-run --profile
Run Code Online (Sandbox Code Playgroud)
这将使用名称执行任务的干运行{task}并在其下创建配置文件html文件$buildDir/reports/profile.您可以使用它来查看哪些任务占用了大部分时间,而不是通过配置,依赖项解析和任务执行.如果您可以看到一项任务需要花费很长时间,请查看它并查看是否可以减少该任务中发生的事情.
要减少配置时间,请尝试在文件中启用按需配置,gradle.properties如下所示:
org.gradle.configureondemand=true
Run Code Online (Sandbox Code Playgroud)
这意味着gradle将尝试仅配置运行任务所需的必要项目,而不是配置所有内容.
gradle守护程序是一个后台进程,当您的gradle任务完成时它不会退出,并且可以重复使用.这限制了每次构建时启动新gradle jvm进程的开销.要激活gradle守护程序,请将以下行添加到您的gradle.properties文件中:
org.gradle.daemon=true
Run Code Online (Sandbox Code Playgroud)
有些事情很简单,因为升级gradle版本可以提高速度.如果您尚未升级一段时间,或者使用相当旧的版本,请考虑升级.升级可能会有一些初步的痛苦,但从长远来看它是值得的.这同样适用于升级java版本.显然,由于其他限制,这并不总是可行,但请尝试使用最新的Java版本.
Gradle允许您指定项目能够使用的依赖项的范围,如下所示:
dependencies {
compile "commons-lang:commons-lang:2.+"
}
Run Code Online (Sandbox Code Playgroud)
这意味着gradle将始终尝试查找与约束匹配的最新版本的依赖项.这种灵活性会带来性能成本,因为gradle必须联机以检查要使用的版本.出于这个原因,以及其他一些我不会在这里讨论的内容,最好明确指定依赖的版本.
这允许并行构建不相关的子项目,从而加快构建过程.要启用此功能,请在以下位置设置gradle.properties:
org.gradle.parallel=true
Run Code Online (Sandbox Code Playgroud)
假设您要进行构建,但不一定要再次运行所有测试.您可以运行以下任务,并且不会运行测试任务.这可以显着增加构建时间:
./gradlew build -x test
Run Code Online (Sandbox Code Playgroud)
编辑 - 经过一些进一步的研究,在找到答案之后,我有了进一步的建议.
如链接问题所示,如果您有一个项目而您只想在某些情况下运行功能测试,则可以将以下内容添加到根build.gradle文件中:
project('functional-tests') {
test {
onlyIf {
project.hasProperty("functionalTests")
}
}
Run Code Online (Sandbox Code Playgroud)
}
这意味着只有在运行如下任务时才会运行功能测试:
./gradlew test -PfunctionalTests
Run Code Online (Sandbox Code Playgroud)
您也可以禁用某些子项目,如下settings.gradle所示:
if (someBoolean) {
include 'functional-tests'
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
974 次 |
| 最近记录: |