Wenn, man mit IDEA arbeitet und ein Java Projekt hat. Egal ob es ein GUI, Server oder was anderes ist, will man natürlich das Programm auch mal starten.
Mit gradle run
zum Beispiel. Dazu verwendet man dann das Gradle Run aus der IDE. Das funktioniert auch ganz gut. Aber da gibt es ein paar kleine Probleme.
Wenn das Programm, welches man aus IDEA aus starten will, nun aber mehr Speicher benötigt als Default, wird es schwierig.
Man muss dem Gradle, welches mein Projekt startet, mitteilen, dass es spezielle Parameter an die Java VM übergeben soll.
Man will zum Beispiel die Kommandozeilen Parameter -Xmx64g -Xms256m
an die JVM des zu startenden Programm übergeben, welches von Gradle gestartet wird, was wiederum von IDEA gestartet wird
Man muss sich klarmachen, wie das ganze Funktioniert. Wenn man ein Prozess mit Java startet, dann ist das logischerweise immer eine eigene Instanz, mit eigener Konfiguration und Argumenten. Nur weil man jetzt in einem Java Prozess ist, und ein anderes Java Programm aufruft, heißt das nicht, dass sich die Speichereinstellungen oder VM Einstellungen vererben. Nebenbei gilt das auch für C/C++ und so weiter.
Was man vererben kann, sind Environment Einstellungen. Wenn man aber mehr Speicher braucht, könnte man mit JVM_ARGS
arbeiten,
das funktioniert jedoch bei IDEA / Windows nicht. Warum, weiß ich nicht.
Wenn wir wollen, dass wir ein Prozess aus Gradle starten wollen, genau das tut ja das Run, dann müssen wir Gradle mitteilen, das er selbst Kommandozeilen Parameter der Java VM unterjubelt, die Gradle selbst startet.
Da hat die IDE gar nichts mit zutun.
Gradle selbst hat auch Kommandozeilen Parameter, mit denen man das tun könnte, die sind aber sehr seltsam.
Diese Lösung ist die vermutlich beste, da sie auch dann funktioniert, wenn jemand keine IDE benutzt.
Man trägt die Kommandozeilen Parameter, die man an seine Java VM von sein Programm übergeben will, in die Projektdatei von Gradle ein.
Die Zeile in der Datei build.gradle
:
applicationDefaultJvmArgs = ["-Xms256m", "-Xmx96g"]
Löst das Problem. Gradle wird nun bei gradle run
diese Kommandozeilen Parameter an die Java VM anhängen.