IDEA + Gradle + Run

Kategorie

  • IDEA Intellij
  • Gradle Projekt
  • Run Project via Gradle Run
  • Memory -Xmx -Xms Argumente

Problem

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.

Was man will

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

Was nicht funktioniert

  • Editieren der IDEA VM Optionen (findet man sehr oft, ist aber falsch, da das kein IDEA Problem ist)
  • Editieren der Projekt-Konfiguration (findet man auch oft, ist aber auch falsch, da es nur für Gradle gilt, aber nicht für den Run Prozess)
  • Windows und JVM_ARGS Environment (ich weiß nicht warum, aber das will nicht)

Was passiert eigentlich

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.

Lösung

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.