523 Stimmen

Wie sage ich Gradle, eine bestimmte JDK-Version zu verwenden?

Ich kann nicht herausfinden, wie ich das zum Laufen bringe.

Szenario:

  • Ich habe eine Anwendung mit Gradle erstellt
  • Die Anwendung verwendet JavaFX

Was ich möchte

  • Verwenden Sie eine Variable (die pro Entwickler-Maschine definiert ist), die auf eine Installation eines JDK zeigt, das für den Bau der gesamten Anwendung / Tests / ... verwendet wird

Ich habe daran gedacht, die gradle.properties-Datei zu haben, die die Variable definiert. Etwas in der Art von

JAVA_HOME_FOR_MY_PROJECT=

Was ich nicht möchte

  • Zeigen Sie JAVA_HOME auf das gewünschte JDK

Ich könnte mit vielen Vorschlägen leben:

  • eine Lösung, die eine Systemumgebungsvariable definiert, die ich in meinem build.gradle-Skript überprüfen kann
  • eine in gradle.properties definierte Variable
  • das Überschreiben der JAVA_HOME-Variable nur für den Build-Kontext (etwas wie use JAVA_HOME=)
  • etwas, an das ich nicht gedacht habe

Frage:

  • Wie verknüpfe ich eine Variable (wie auch immer definiert, als Variable in der gradle.properties-Datei, Systemumgebungsvariable, ...) mit dem Bauprozess?

Ich habe mehr als ein JDK7 verfügbar und muss auf eine spezielle Version (mindestens JDK_u-Version) verweisen.

Jede Antwort wird geschätzt und ich bin dankbar für jeden Hinweis in die richtige Richtung.

463voto

First Zero Punkte 20290

Zwei Möglichkeiten

  1. In gradle.properties im Verzeichnis .gradle in Ihrem HOME_VERZEICHNIS setzen Sie org.gradle.java.home=/pfad_zum_jdk_verzeichnis

oder:

  1. In Ihrer build.gradle

     compileJava.options.fork = true
     compileJava.options.forkOptions.executable = '/pfad_zu_javac'

264voto

mirmdasif Punkte 5644

Wenn Sie JDK_PATH in gradle.properties hinzufügen, wird Ihr Build von diesem bestimmten Pfad abhängig. Führen Sie stattdessen gradle task mit folgendem Befehlszeilenparameter aus

gradle build -Dorg.gradle.java.home=/JDK_PATH

Auf diese Weise ist Ihr Build nicht von einem konkreten Pfad abhängig.

195voto

Geert Punkte 3085

Für diejenigen, die hier landen, wenn sie nach dem Gradle-Äquivalent der Maven-Eigenschaft maven.compiler.source (oder 1.8) suchen:

In build.gradle kannst du das mit folgendem Code erreichen

apply plugin: 'java'
sourceCompatibility = 1.8
targetCompatibility = 1.8

Siehe die Gradle-Dokumentation dazu.

Gradle 7+

Ab Gradle 7 kannst du auch die release-Eigenschaft verwenden, die das JDK 9 --release-Compilerargument nutzt:

tasks.withType(JavaCompile) {
    options.release = 8
}

(danke Pedro Lamarão)

102voto

Raman Punkte 14828

Gradle 6.7+ — Verwenden Sie die Gradle Toolchain-Unterstützung

Der richtige Weg, dies mit modernen Versionen von Gradle (Version 6.7+) zu tun, besteht darin, die Gradle Java-Toolchain Unterstützung zu verwenden.

Der folgende Block wird, wenn das Java-Plugin auf das aktuelle Projekt angewendet wird, Java 11 in allen Java-Kompilierungs-, Test- und Javadoc-Aufgaben verwenden:

java {
  toolchain {
    languageVersion.set(JavaLanguageVersion.of(11))
  }
}

Dies kann auch für individuelle Aufgaben festgelegt werden.

HINWEIS: Für andere Aufgaben, die auf ein Java-Ausführbares oder Java-Home angewiesen sind, verwenden Sie die Compiler-Metadaten, um die entsprechenden Optionen festzulegen. Im folgenden finden Sie ein Beispiel mit dem Kotlin-Plugin vor Version 1.5.30.

Gradle versucht, den Speicherort des angegebenen JDK über mehrere gängige Mechanismen automatisch zu erkennen. Benutzerdefinierte Speicherorte können konfiguriert werden, wenn die automatische Erkennung nicht ausreicht.

Kotlin 1.7.20+

Für Kotlin 1.7.20+ unterstützt das Kotlin-Plugin direkt Toolchains und hat eine vereinfachte Syntax:

kotlin {
  jvmToolchain(17)
}

Kotlin 1.5.30+

Für Kotlin 1.5.30+ unterstützt das Kotlin-Plugin direkt Toolchains:

kotlin {
  jvmToolchain {
    (this as JavaToolchainSpec).languageVersion.set(JavaLanguageVersion.of(17))
  }
}

Ältere Versionen von Kotlin

Die Konfiguration des Kotlin-Compilers für Versionen vor 1.5.30 umfasst die Verwendung der Toolchain-API zur Bestimmung des Compilers und das Weitergeben dieser Informationen an das Plugin. Andere compilerbasierte Plugins können auf ähnliche Weise konfiguriert werden.

val compiler = javaToolchains.compilerFor {
  languageVersion.set(JavaLanguageVersion.of(11))
}

tasks.withType().configureEach {
  kotlinOptions.jdkHome = compiler.get().metadata.installationPath.asFile.absolutePath
}

62voto

Jafar Karuthedath Punkte 2347

Wenn Sie dieses Problem mit Intellij IDE haben, versuchen Sie diese Optionen

  1. Setzen Sie Gradle JVM Home Bildbeschreibung hier eingeben

  2. Legen Sie die JDK-Version in den Projekteinstellungen fest Bildbeschreibung hier eingeben

  3. Überprüfen Sie die JDK-Version in den Modulen Bildbeschreibung hier eingeben

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X