Как оптимизировать производительность сборки Gradle в отношении продолжительности сборки и использования оперативной памяти?

В настоящее время я переключаюсь с ant на gradle для своего многомодульного веб-приложения, и на данный момент кажется, что текущая версия Gradle (M9) может выходить за свои пределы. Но, возможно (надеюсь, ) это просто проблема в том, что я недостаточно хорошо понимаю концепции Gradle или не знаю «волшебного переключателя повышения производительности». Я был бы рад любому намеку на то, как можно оптимизировать производительность сборки.

Проблемы: проходит несколько минут, прежде чем отображается первый compileJava, и даже если в исходниках ничего не изменилось, процесс выполняется не менее 7 минут, пока не вылетит на полпути :testClasses(при различных subprojects) со следующим сообщением:

* 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 {
}

Я попытался решить проблему с кучей, увеличив максимальное количество памяти. ize до 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'
            }
39
задан peterp 21 March 2012 в 16:10
поделиться