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

时间:2016-07-05 18:04:42

标签: intellij-idea gradle gradlew

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

我的问题是将项目导入IntelliJ Community Edition。第一次导入时,大约需要10分钟,但在此之后,每当我对项目进行刷新时,它仍然需要相同的时间。 我看到正在执行的后台任务:我看到消息显示得非常快,然后是Gradle: Build的库存,我不知道它在做什么!

我尝试提高日志级别,我看到DEBUG消息说:.project.GradleProjectResolver - Gradle data obtained in 311943 ms,我认为这是需要花费大量时间的原因,但正如我所说,我没有知道它正在做什么需要这么长的时间

BTW,我正在使用gradle包装器(不确定它是否有所作为)

感谢任何帮助, 提前致谢

2 个答案:

答案 0 :(得分:8)

我在使用Gradle 3.4.1和IDEA 2016.3.5时遇到了类似的问题。刷新一个相当大的项目大约需要30分钟。我已经将YourKit探查器连接到Gradle守护程序以调查它正在做什么。我注意到它在List<ArrayList<String>> l1 = new ArrayList<>(); ArrayList<String> l2 = new ArrayList<>(); l2.add("name1"); l2.add("name2"); l1.add(new ArrayList<>(l2)); 中花了很多时间。当我搜索该问题时,我很快找到了这个解决方案:http://justthesam.com/2016/10/fixing-java-net-inet6addressimpl-lookupallhostaddr-slowdown/

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

/etc/hosts

127.0.0.1 localhost Your-Hostname-Here ::1 localhost Your-Hostname-Here 留在那里以确保您不会破坏任何其他内容。感谢Sam找到了这个解决方案。

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

答案 1 :(得分:0)

对于将来的读者:

我在旅途中学到了一些东西。

编号1.订单对您潜在的回购清单很重要。如果您首先输入“ https://repo1.mycompany.com:443/artifactory/Our-Releases/”,它将首先在此尝试,并且可能会失败,然后转到jcenter。这是我的主要问题。

如果您有一个多模块项目...请尝试集中在(根)build.gradle中。 同样,删除(非根目录)build.gradle文件中的所有“存储库”声明。

通常,不包括“ mavenLocal”。请参阅下面的链接。

通常,选择jcenter或mavenCentral,但是由于jcenter是mavenCentral的超集,因此不需要两者。请参阅下面的SOF答案链接。

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()

}

或者,如果您希望根存储库和模块存储库相同,则可以将所有内容放入“ allprojects”中。

只需尽力整合即可。