Comment optimiser gradle construire la performance en matière de construire de la durée et de l'utilisation de la RAM?
Je suis actuellement à la commutation de la fourmi à gradle pour mon multi module d'application web et au moment où il semble que la version actuelle de Gradle (M9) sera peut-être l'exécution de ses limites. Mais peut-être (je l'espère), c'est juste un problème de moi de ne pas comprendre les concepts de Gradle assez bon ou pas en sachant que la "magie de la performance boost switch". Je serais heureux de tout soupçon sur la façon dont la génération de performance pourrait être optimisée.
Les problèmes: plusieurs minutes s'écoulent avant que le premier compileJava
est affiché, et même si rien n'a changé dans les sources, le processus est en cours d'exécution au moins 7 minutes jusqu'à ce qu'il se bloque à mi-chemin par le biais de :testClasses
(à différents sous-projets) avec le message suivant:
* What went wrong:
Could not resolve all dependencies for configuration ':mysubproject_X:testRuntime'.
> Java heap space
Le projet se compose d'environ 30 (en partie interdépendants) des sous-projets, la construction.gradle d'entre eux étant plus ou moins la même chose et sont utilisés pour générer un fichier jar à partir de chaque sous-projet, par exemple
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 {
}
J'ai essayé de résoudre le tas de problème d'espace par ramping up max taille de la mémoire de 1024M, mais il n'a pas aidé. Mon principal construire.gradle fichier ressemble à ceci:
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'
}
- Ne vous arrive de remplacer les jetons? J'ai trouvé que c'était la seule chose qui a causé le multi-projet Gradle construire un ordre de grandeur plus lent parce que nous faisions de jeton de remplacement au cours de la .gradle cache.
- Merci pour votre suggestion. Cependant, il n'y avait pas de remplacements impliqués. Peter Niederwieser la réponse ci-dessous a fait l'affaire 🙂
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin de donner de la mémoire au Gradle JVM, et non pas à la compilation de la tâche/JVM. Une façon de le faire est par l'intermédiaire de la
GRADLE_OPTS
variable d'environnement (GRADLE_OPTS=-Xmx512m
).Si à l'aide de la Gradle Wrapper vous pouvez définir
DEFAULT_JVM_OPTS
dansgradlew
comme ceci:Le définir de la même manière dans
gradlew.bat
si vous êtes sur Windows:La Gradle Wrapper tâche peut également être modifié pour inclure automatiquement. De cette façon, le Gradle développeurs avez résolu:
Je viens de trouver une très belle façon de gérer ce problème. Pas besoin de coutume gradle wrapper ou GRADLE_OPTIONS.
Exécuter Gradle avec l' --info option pour voir où il va utiliser ce paramètre pour max la taille de la mémoire.
build.grade
. La syntaxe a changé un peu depuis. Voici le JavaCompile docs.Je suis en utilisant la version suivante de gradle.propriétés pour faire Gradle mieux dans Android des projets
Dans le gradle.propriétés fichier, ajoutez la ligne suivante :
org.gradle.daemon=true
Cela va stimuler l'accumulation de prises de
Placer le contenu de ~/.gradle que gradle.propriétés
Personnellement, je suis passé par tous les articles ici, mais de faire ces étapes, il fixe.
Si vous êtes en utilisant 32 bits jvm qui peut être question d'installer une jvm 64 bits.
Au moment de l'exécution, les paramètres d'ajouter:
Aucune des réponses ci-dessus, a travaillé pour moi, alors j'ai trouvé ce-
La Configuration De Mon Système-
JVM options pour l'exécution de Gradle peut être réglée via les variables d'environnement. Vous pouvez utiliser GRADLE_OPTS ou JAVA_OPTS, ou les deux. JAVA_OPTS est par convention une variable d'environnement partagé par de nombreuses applications Java. Un cas d'utilisation typique serait de définir le proxy HTTP dans JAVA_OPTS et les options de mémoire dans GRADLE_OPTS. Ces variables peuvent également être fixés au début de la gradle ou gradlew script.
J'ai ajouté mentionnés ci-dessous deux Variables d'Environnement et résolu ce problème-
Espère que cette aide pour les gars comme moi.