J'essaie de créer mon application via Gradle et je rencontre actuellement ce problème après l'exécution d'un ./gradlew build
:
:myApp:compileDebug
The system is out of resources.
Consult the following stack trace for details.
Java.lang.OutOfMemoryError: Java heap space
at com.Sun.tools.javac.util.Position$LineMapImpl.build(Position.Java:139)
at com.Sun.tools.javac.util.Position.makeLineMap(Position.Java:63)
at com.Sun.tools.javadoc.DocCommentScanner.getLineMap(DocCommentScanner.Java:438)
at com.Sun.tools.javac.main.JavaCompiler.parse(JavaCompiler.Java:512)
at com.Sun.tools.javac.main.JavaCompiler.parse(JavaCompiler.Java:550)
at com.Sun.tools.javac.main.JavaCompiler.parseFiles(JavaCompiler.Java:804)
at com.Sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.Java:727)
at com.Sun.tools.javac.main.Main.compile(Main.Java:353)
at com.Sun.tools.javac.api.JavacTaskImpl.call(JavacTaskImpl.Java:115)
at org.gradle.api.internal.tasks.compile.jdk6.Jdk6JavaCompiler.execute(Jdk6JavaCompiler.Java:40)
at org.gradle.api.internal.tasks.compile.jdk6.Jdk6JavaCompiler.execute(Jdk6JavaCompiler.Java:33)
at org.gradle.api.internal.tasks.compile.NormalizingJavaCompiler.delegateAndHandleErrors(NormalizingJavaCompiler.Java:95)
at org.gradle.api.internal.tasks.compile.NormalizingJavaCompiler.execute(NormalizingJavaCompiler.Java:48)
at org.gradle.api.internal.tasks.compile.NormalizingJavaCompiler.execute(NormalizingJavaCompiler.Java:34)
at org.gradle.api.internal.tasks.compile.DelegatingJavaCompiler.execute(DelegatingJavaCompiler.Java:29)
at org.gradle.api.internal.tasks.compile.DelegatingJavaCompiler.execute(DelegatingJavaCompiler.Java:20)
at org.gradle.api.internal.tasks.compile.IncrementalJavaCompilerSupport.execute(IncrementalJavaCompilerSupport.Java:33)
at org.gradle.api.internal.tasks.compile.IncrementalJavaCompilerSupport.execute(IncrementalJavaCompilerSupport.Java:24)
at org.gradle.api.tasks.compile.Compile.compile(Compile.Java:68)
at Sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at Sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.Java:39)
at Sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.Java:25)
at Java.lang.reflect.Method.invoke(Method.Java:597)
at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.Java:90)
at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.Java:233)
at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.Java:1047)
at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.Java:877)
at org.gradle.api.internal.BeanDynamicObject$MetaClassAdapter.invokeMethod(BeanDynamicObject.Java:216)
at org.gradle.api.internal.BeanDynamicObject.invokeMethod(BeanDynamicObject.Java:122)
at org.gradle.api.internal.CompositeDynamicObject.invokeMethod(CompositeDynamicObject.Java:147)
at org.gradle.api.tasks.compile.JavaCompile_Decorated.invokeMethod(Unknown Source)
at groovy.lang.GroovyObject$invokeMethod.call(Unknown Source)
:myApp:compileDebug FAILED
Une idée?
Je pense que je l'ai réparé. J'ai eu la solution de ce post . c'est à dire:
remplacement dans gradlew:
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
par
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\" \"-Xmx1024m\" \"-Xms256m\" \"-XX:MaxPermSize=1024m\""
Dans mon projet, il y avait un fichier gradle.properties
avec ces lignes:
# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
# Default value: -Xmx10248m -XX:MaxPermSize=256m
# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
J'ai décommenté la dernière ligne et cela a fonctionné.
J'ai également rencontré ce problème sur un projet Java classique. Notre test était très volumineux et utilisé pour manquer de mémoire ou d’une erreur permgen.
Il y a donc deux solutions 1. Définir les paramètres et exécuter la construction
export Java_OPTS="-Xmx1024M -XX:MaxPermSize=512M -XX:ReservedCodeCacheSize=512M"
export GRADLE_OPTS="-Dorg.gradle.daemon=true"
La deuxième option simplifie la solution dans le fichier gradle
test {
jvmArgs "-XX:MaxPermSize=256m"
}
Je recommande la deuxième option comme solution permanente.
Changer le dossier Java_HOME pour l'installation 64 bits m'a également aidé. Utiliser le programme d'exécution 64 bits pour IDEA après cela.
dexOptions {
incremental true
//javaMaxHeapSize=1024M for 32bit Java,2048M for 64bit Java
javaMaxHeapSize "1024M"
//javaMaxHeapSize "2048M"
}
J'avais ce même problème sur mon serveur de build, une fois que j'ai changé le dossier Java_HOME sur l'installation 64 bits de Java, l'erreur a disparu.
FWIW, j’ai reproduit l’erreur "Le système est à court de ressources" (mais avec une autre piste de pile) en codant en dur une chaîne ridiculement grande dans un fichier source.