webentwicklung-frage-antwort-db.com.de

Wie wird Java 11 Version in Spring / Spring Boot pom.xml angegeben?

Wie kann Java 11 als Version angegeben werden, die in der Datei pom.xml von Spring (oder Spring Boot) verwendet werden soll?

Welchen Wert muss ich in die Eigenschaft Java.version des Poms einfügen?

Für Java 8 verwenden wir 1.8, genau wie die Dokumentation zeigt , für Java 9 ist es 1.9.

Ich bin nicht sicher, ob Java 11 1.11 wäre (obwohl es unwahrscheinlich erscheint), und ich habe gesehen, dass es nur 11 angegeben ist, wenn maven-compiler-plugin verwendet wird. Ich verwende jedoch nicht das Compiler-Plugin.

z.B.

<plugin>
    <groupId>org.Apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.8.0</version>
    <configuration>
        <release>11</release>
    </configuration>
</plugin>

Ich habe mich umgesehen und konnte die Antwort nicht finden, da so ziemlich jede Dokumentation, die ich gelesen habe, sowie Blog-Beiträge, die sich auf die Version Java beziehen, nur die Versionen 8 oder 9 zeigen.

Was soll ich also verwenden? 1.11 oder nur 11?

Ich habe beides versucht und mein Webserver scheint korrekt zu starten und korrekt zu kompilieren (IntelliJ zeigt Information:javac 11.0.2 was used to compile Java sources), bin jedoch nicht ganz davon überzeugt, dass das Ändern des Werts Java.version irgendetwas bewirkt, da ich ihn auf z. 100 und alles funktioniert gut.

Die einzigen verwandten Fragen, die ich finden konnte, sind: Minimum Spring-Version kompatibel mit Java 11 , Spring Boot schlägt aufgrund eines Ruhezustands nach der Migration auf JDK 11 fehl und Spring 4.3.x mit OpenJDK 11 , aber sie werfen kein wirkliches Licht.

18
Acapulco

Kurze Antwort:

Der richtige Weg ist, die folgenden Werte in <Java.version> Für verschiedene Java Versionen zu verwenden:

  • Java 8: 1.8 oder 8
  • Java 9: ​​9
  • Java 10: 10
  • Java 11: 11
  • Java 12: 12

Für Java 11 sollte es also sein:

<properties>
   <Java.version>11</Java.version>
</properties>

Ich bin mir jedoch nicht sicher, ob Java 11 "1.11" sein würde (scheint unwahrscheinlich), und ich habe gesehen, dass es bei Verwendung des Maven-Compiler-Plugins nur "11" ist, aber ich bin es nicht mit dem Compiler-Plugin.

Am Ende wird zum Kompilieren noch maven-compiler-plugin Verwendet. Springboot konfiguriert lediglich eine <Java.version> - Eigenschaft so, dass Sie durch Ändern dieses Werts implizit die maven-compiler-plugin Und <release/> Von <target/> Auf denselben Wert wie angegeben ändern im <Java.version>:

<plugin>
    <groupId>org.Apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.8.0</version>
    <configuration>
        <release>11</release>  <!-- same as <Java.version> -->
        <target>11</target>    <!-- same as <Java.version> -->
    </configuration>
</plugin>

Detaillierte Antwort:

Anscheinend möchten Sie, dass Details Sie überzeugen.

Dies liegt daran, dass jedes Spring-Boot-Projekt den übergeordneten POM spring-boot-starter-parent Erweitert, der definiert<Java.version> Wie folgt lautet:

<properties>
    <Java.version>1.8</Java.version>
    <maven.compiler.source>${Java.version}</maven.compiler.source>
    <maven.compiler.target>${Java.version}</maven.compiler.target>
</properties>

Aus dem Maven-Compiler-Plugin docs sind maven.compiler.source Und maven.compiler.target Die Benutzereigenschaft für <release> Und <source> Konfigurationsparameter. Aufgrund des Verhaltens der Benutzereigenschaft bedeutet das Setzen dieser beiden Eigenschaften auf 11 Folgendes:

<plugin>
    <groupId>org.Apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.8.0</version>
    <configuration>
        <release>11</release> <!-- maven.compiler.release -->
        <source>11</source>   <!-- maven.compiler.source  -->
    </configuration>
</plugin>

Aus dem maven-compiler-plugindocs sind <release> Und <source> Die Argumente -release Und -source Für das Java Compiler (javac). Dann können wir aus javac docs sehen, dass diese beiden Argumente die folgenden Werte haben dürfen:

  • 1.6: In Java SE 6 wurden keine Sprachänderungen eingeführt. Codierungsfehler in Quelldateien werden jetzt jedoch als Fehler anstelle von Warnungen gemeldet, wie dies in früheren Versionen von Java Platform, Standard durchgeführt wurde Auflage.
  • 6: Synonym für 1.6.
  • 1.7: Der Compiler akzeptiert Code mit Funktionen, die in Java SE 7 eingeführt wurden.
  • 7: Synonym für 1.7.
  • 1.8: Der Compiler akzeptiert Code mit Funktionen, die in Java SE 8 eingeführt wurden.
  • 8: Synonym für 1.8.
  • 9: Der Compiler akzeptiert Code mit Funktionen, die in Java SE 9 eingeführt wurden.
  • 10: Der Compiler akzeptiert Code mit Funktionen, die in Java SE 10 eingeführt wurden.
  • 11: Der Compiler akzeptiert Code mit Funktionen, die in Java SE 11 eingeführt wurden.
  • 12: Der Compiler akzeptiert Code mit Funktionen, die in Java SE 12 eingeführt wurden.

Daher sollte <Java.version> Für Java 11 auf 11 Gesetzt werden.

43
Ken Chan

Ich füge es als Antwort hinzu, damit es für mehr Menschen hilfreich sein kann:

Seit Java 9) werden die Versionen als 9, 10, 11 Usw. anstelle von 1.8 Angegeben. , 1.7 Usw. Weiterführende Literatur hier .

Die Art und Weise, wie Sie die JDK-Version mit <release>11</release> Angeben, ist korrekt. Es wurde mit maven-compiler-plugin 3.6 Eingeführt und entspricht dem alten Weg wie folgt:

<plugins>
  <plugin>
    <groupId>org.Apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.8.0</version>
    <configuration>
      <source>11</source> -- Using JDK 11 to compile
      <target>11</target> -- Using JDK 11 as target
    </configuration>
  </plugin>
</plugins>

This post kann bei der Verwendung von maven-compiler-plugin Mit JDK 11 hilfreich sein.

4
RKrum

Wenn jemand Java 11 als Version verwenden möchte, die in Spring (oder Spring Boot) in einem gradle -Projekt verwendet werden soll, verwenden Sie entweder sourceCompatibility = '11'. oder sourceCompatibility = '1.11' in Ihrer build.gradle-Datei

plugins {
id 'org.springframework.boot' version '2.1.4.RELEASE'
}

apply plugin: 'io.spring.dependency-management'

group = 'au.com.ranuka'
version = '0.0.1-SNAPSHOT'

sourceCompatibility = '11'
//or 
sourceCompatibility = '1.11'

repositories {
   mavenCentral()
}

dependencies {

}
1
Ranuka

Sie sollten das Maven-Compiler-Plugin in Ihrer POM-Datei nicht erwähnen müssen, wenn Sie nur die Compiler-Version angeben möchten. Fügen Sie diese Eigenschaften stattdessen Ihrer POM-Datei hinzu

<properties>
  <maven.compiler.source>1.8</maven.compiler.source>
  <maven.compiler.target>1.8</maven.compiler.target>
</properties>

Edit: Mein schlechtes, es sieht so aus, als ob sich die Eigenschaften der Versionsnummer ab der Version 3.6 des Maven-Compiler-Plugins geändert haben. Das obige Beispiel ist in Ordnung für Java 8 und niedriger. Für Java 9) fügen Sie diese Eigenschaft hinzu:

<properties>
    <maven.compiler.release>9</maven.compiler.release>
</properties>

Überprüfen Sie die akzeptierte Antwort auf diese Frage: Angabe von Java Version in Maven - Unterschiede zwischen Eigenschaften und Compiler-Plugin

0
DwB