IntelliJ IDEA在刷新Gradle项目时需要很长时间



我有一个非常大的项目,在Gradle中配置了许多子项目。当我从命令行进行干净的构建时,大约需要10分钟,但在此之后,构建整个项目非常快。

我的问题是当导入项目到IntelliJ社区版。当第一次导入时,大约需要10分钟,但在那之后,每当我对项目进行刷新时,它仍然需要相同的时间。我看到后台任务正在执行:我看到消息非常迅速地显示出来,然后它在Gradle: Build存储,我不知道它在做什么!

我试图增加日志级别,我看到一个DEBUG消息说:.project.GradleProjectResolver - Gradle data obtained in 311943 ms,我认为这是它需要很多时间的原因,但正如我所说,我不知道它在做什么,需要这么多时间

BTW,我使用gradle包装器(不确定它是否有区别)

感谢任何帮助,提前感谢

我在Gradle 3.4.1和IDEA 2016.3.5中遇到了类似的问题。一个大项目的更新大约需要30分钟。我已经将YourKit分析器连接到Gradle守护进程,以调查它在做什么。我注意到它花了很多时间在java.net.Inet6AddressImpl.lookupAllHostAddr。当我用谷歌搜索这个问题时,我很快找到了这个解决方案:http://justthesam.com/2016/10/fixing-java-net-inet6addressimpl-lookupallhostaddr-slowdown/

这似乎是Mac OSX上的Java进程在不支持IPv6的网络上的问题,导致IPv6查找超时。要应用此修复,请在终端窗口中输入hostname以查找主机名。然后将主机名添加到/etc/hosts

127.0.0.1   localhost Your-Hostname-Here
::1         localhost Your-Hostname-Here

localhost留在那里,以确保你不会破坏任何其他东西。感谢Sam找到了这个修复。

请注意,由于许多不同的原因,您可能会遇到长时间刷新。但是,在Gradle守护进程上连接一个分析器应该可以让你更深入地了解正在发生的事情。

给将来的读者:

在这次旅行中我学到了一些东西。

1。ORDER MATTERS在你的潜在回购清单上。如果你输入"https://repo1.mycompany.com:443/artifactory/Our-Releases/"首先,它将首先在那里尝试,可能会失败,然后转到jcenter land。这是我的主要问题。

如果你有一个多模块项目…尝试在(根)build.gradle中进行集中。也就是说,删除任何"存储库"。(非根)构建中的声明。gradle文件。

通常不包含&;mavenlocal &;。

通常,选择jcenter或mavenCentral,但由于jcenter是mavenCentral的超集,因此您不需要两者都需要。

repositories {
    // ORDER MATTERS HERE.  See : https://stackoverflow.com/questions/50726435/difference-among-mavencentral-jcenter-and-mavenlocal/50726436#50726436
    
    //  As a general advice, you should avoid adding mavenLocal() as a repository.   https://docs.gradle.org/current/userguide/declaring_repositories.html#sec:case-for-maven-local 
    //mavenLocal()
    jcenter()
    //jcenter is a superset of mavenCentral() so we do not specify mavenCentral here
    maven { url "https://repo1.mycompany.com:443/artifactory/Our-Releases/" }
    maven { url "https://repo1.mycompany.com:443/artifactory/Our-Snapshots/" }

}
对于我的多模块gradle设置,我有上面的嵌套在
subprojects { 
}

如果你有一个单体:(那么你就不会在子项目下嵌套。

现在,如果我把上面的放到"子项目"中…我不得不把它们中的一些放在(根)build.gradle

// repositories that apply to ONLY the root project.
repositories {
    jcenter()
}

或者您可以将所有内容放入"所有项目"中。如果你希望根存储库和模块存储库相同。

尽你所能去巩固。

2022年2月/3月更新

jcenter()现在已弃用。

使用

mavenCentral ()

代替jcenter()

参见:JCenter deprecation;对Gradle和Android的影响

相关内容

最新更新