performance - 如何针对构建持续时间和 RAM 使用优化 gradle 构建性能?

我目前正在为我的多模块 Web 应用程序从 ant 切换到 gradle,目前看来,当前版本的 Gradle (M9) 可能会超出其限制。但也许(希望)这只是我对 Gradle 的概念不够了解或不知道“神奇的性能提升开关”的问题。我很乐意提供有关如何优化构建性能的任何提示。

问题:在第一个 compileJava 显示前几分钟过去了,即使源代码没有任何变化,该进程至少运行了 7 分钟,直到它在 中途崩溃: testClasses(在不同的子项目中)带有以下消息:

* What went wrong:
Could not resolve all dependencies for configuration ':mysubproject_X:testRuntime'.
> Java heap space

该项目由大约 30 个(部分相互依赖的)子项目组成,它们的 build.gradle 或多或少相同,用于从每个子项目构建一个 jar 文件,例如

sourceSets {

    main {
        java {
            srcDirs 'src'
        }
    }
}

dependencies {

    compile project(':mysubproject_A')
    compile project(':mysubproject_B')
    compile project(':mysubproject_E')

    compile group: 'commons-lang', name: 'commons-lang', version: '2.2'

}

// copy all non-java files from src
copy {
    from sourceSets.main.java.srcDirs
    into "$buildDir/classes/main"
    exclude '**/*.java'
}

jar {
}

我试图通过将最大内存大小提高到 1024M 来解决堆空间问题,但它没有帮助。我的主要 build.gradle 文件如下所示:

            sourceCompatibility = 1.6
            version = 0.5

            useFindBugs = false

            apply plugin: 'java'

            configurations {
            }

            repositories {
                mavenCentral()
                mavenRepo url:"http://repository.jboss.org/maven2", artifactUrls: ["https://repository.jboss.org/nexus/content/repositories/public","http://opensource.55minutes.com/maven-releases"]
            }


            dependencies {
            }

            buildscript {
                repositories {
                    mavenRepo url: 'http://gradle.artifactoryonline.com/gradle/plugins'
                    flatDir(dirs: "$projectDir/lib")
                }

                dependencies {
                    classpath "org.gradle.plugins:gradle-idea-plugin:0.3.1"
                }
            }

            subprojects {
                apply plugin: 'java'
                apply plugin: 'idea'

                repositories {
                    mavenCentral()
                    mavenRepo url:"http://repository.jboss.org/maven2", artifactUrls: ["https://repository.jboss.org/nexus/content/repositories/public","http://opensource.55minutes.com/maven-releases"]
                }

                dependencies {
                    testCompile 'junit:junit:4.8.2'
                }

                compileJava {
                    options.encoding = 'UTF-8'
                    options.fork (memoryMaximumSize: '1024m') 
                }

                javadoc {
                    options.encoding = 'UTF-8'
                }

                test {
                    testReportDir = file(rootProject.testReportDir)
                    forkEvery = 1
                    jvmArgs = ['-ea', '-Xmx1024m']
                }
            }


            dependsOnChildren()

            task wrapper(type: Wrapper) {
                gradleVersion = '1.0-milestone-9'
            }

最佳答案

您需要为 Gradle JVM 提供更多内存,而不是为编译任务/JVM。一种方法是通过 GRADLE_OPTS 环境变量 (GRADLE_OPTS=-Xmx512m)。

https://stackoverflow.com/questions/9808488/

相关文章:

c++ - 如何设置 CMake 以生成仅 header 项目?

build - 学习 Gradle 构建工具的最佳资源

ios - 如何在 Xcode 中创建发布版本?

javascript - 使用 grunt.js 使用 RequireJS 组合 JavaScrip

android - java.lang.IllegalStateException : Dex ar

android - 如何将 Eclipse Android 项目转换为使用 Ant 进行构建?

c# - Visual Studio : The Operation could not be co

c - CMake下的多个目录

haskell - 我可以得到 `cabal install` 来使用多核吗?

xcode - 如何在 Xcode 5 中自动增加内部版本号