Actualmente estoy cambiando de hormiga a gradle para mi aplicación web de varios módulos y en este momento parece que la versión actual de Gradle (M9) podría estar funcionando contra sus límites. Pero tal vez (con suerte) es solo un problema que no entienda los conceptos de Gradle lo suficientemente bien o que no conozca el "interruptor de aumento de rendimiento mágico". Estaría feliz por cualquier pista sobre cómo se podría optimizar el rendimiento de la construcción.¿Cómo optimizar el rendimiento de compilación de gradle con respecto a la duración de compilación y el uso de RAM?
Los problemas: pasan varios minutos antes de que aparezca el primer compileJava
, e incluso si no ha cambiado nada en las fuentes, el proceso se está ejecutando al menos 7 minutos hasta que se bloquea a mitad de camino a través :testClasses
(a diferentes subproyectos) con el siguiente mensaje :
* What went wrong:
Could not resolve all dependencies for configuration ':mysubproject_X:testRuntime'.
> Java heap space
el proyecto consiste de aproximadamente 30 (en parte interdependientes) subproyectos, la build.gradle de ellos siendo más o menos lo mismo y se utilizan para construir un archivo jAR de cada subproyecto, por ejemplo,
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 {
}
Me trataron de resolver el problema de espacio de almacenamiento dinámico por el aumento gradual de tamaño máximo de memoria a 1024M, pero no sirvió de nada. Mi archivo principal build.gradle se ve así:
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'
}
hace suceder que ser la sustitución de fichas? He encontrado que esta es la única causa de que la compilación de proyectos múltiples de Gradle sea un orden de magnitud más lenta porque estábamos reemplazando los tokens por la caché de .gradle. –
Gracias por su sugerencia. Sin embargo, no hubo reemplazos involucrados. La respuesta de Peter Niederwieser a continuación hizo el truco :) – peterp