Как указать версию Java 11 в Spring / Spring Boot pom.xml? - PullRequest
0 голосов
/ 31 января 2019

Как правильно указать Java 11 в качестве версии, которая будет использоваться в файле pom.xml Spring (или Spring Boot)?

То есть, какое значение нужно указать в java.versionсвойство pom?

Для Java 8 мы используем 1.8, точно так же как документация показывает , для Java 9 это 1.9.

Я неконечно, если Java 11 будет 1.11 (хотя это кажется маловероятным), и я видел, что он указан как 11 при использовании maven-compiler-plugin, однако я не использую плагин компилятора.

например,

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

Я искал вокруг и не мог найти ответ, так как почти любая документация, которую я прочитал, а также сообщения в блоге, относящиеся к версии Java, показывают только версии 8 или 9.

Так что мне использовать?1.11 или просто 11?

Я пробовал оба, и мой веб-сервер, кажется, запускается правильно и компилируется правильно (IntelliJ показывает Information:javac 11.0.2 was used to compile java sources), однако я не совсем убежден, что изменение значения java.versionделает все что угодно, потому что я могу установить его, например, 100 и все работает нормально.

Единственные связанные вопросы, которые я могу найти: Минимальная версия Spring, совместимая с Java 11 , Spring Boot завершается неудачно из-за ошибки Hibernate после миграции на JDK 11 и Spring 4.3.x с OpenJDK 11 , но на самом деле они не проливают свет.

Ответы [ 4 ]

0 голосов
/ 07 июня 2019

Если кто-то хочет указать Java 11 в качестве версии, которая будет использоваться в Spring (или Spring Boot) в проекте gradle , то используйте либо sourceCompatibility = '11', либо sourceCompatibility = '1.11' вваш файл build.gradle

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 {

}
0 голосов
/ 31 января 2019

Я добавляю его в качестве ответа, чтобы он мог быть полезен большему количеству людей:

После Java 9 версии указываются как 9, 10, 11 и т. Д., Вместо1.8, 1.7 и т. д. Дальнейшее чтение здесь .

То, как вы указываете версию JDK с помощью <release>11</release>, является правильным.Он был введен с maven-compiler-plugin 3.6 и эквивалентен старому способу, как показано ниже:

<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>

Этот пост может быть полезен при использовании maven-compiler-plugin с JDK 11.

0 голосов
/ 31 января 2019

Краткий ответ:

Правильный способ - использовать следующие значения в <java.version> для разных версий Java:

  • Java 8: 1.8 или8
  • Java 9: ​​9
  • Java 10: 10
  • Java 11: 11
  • Java 12: 12

Таким образом, для Java 11 это должно быть:

<properties>
   <java.version>11</java.version>
</properties>

Однако я не уверен, что Java 11 будет "1.11" (кажется маловероятным), и я видел, что это указано просто "11 "при использовании maven-compiler-plugin, однако я не использую плагин компилятора.

На самом деле, в конце он все еще использует maven-compiler-plugin для компиляции.Springboot просто настраивает свойство <java.version> так, что, изменяя это значение, вы неявно меняете maven-compiler-plugin <release/> и <target/> на то же значение, которое указано в <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>

Подробный ответ:

Похоже, вы хотите, чтобы детали убедили вас.

Это потому, что каждый весенний загрузочный проект расширяет родительский pom spring-boot-starter-parent, который определяет <java.version> следующим образом:

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

Из maven-compiler-Плагин docs , maven.compiler.source и maven.compiler.target - это пользовательское свойство для параметров конфигурации <release> и <source>. В зависимости от поведения пользовательского свойства установите эти двасвойства 11 означает установить следующее:

<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>

Из maven-compiler-plugin документов снова, <release> и <source> - это -release и -sourceаргумент для компилятора Java (javac).Затем из документов javac мы можем видеть, что эти два аргумента могут иметь следующие значения:

  • 1.6: В Java SE 6 не было внесено никаких изменений языка. Однакоошибки кодирования в исходных файлах теперь сообщаются как ошибки, а не предупреждения, как это было в более ранних выпусках Java Platform, Standard Edition.
  • 6: синоним для 1.6.
  • 1.7: компилятор принимает код с функциями, представленными в Java SE 7.
  • 7: синоним для 1.7.
  • 1.8: компилятор принимает код с функциями, представленными в Java SE 8.
  • 8: синоним для 1.8.
  • 9: компилятор принимает код с функциями, представленными в Java SE 9.
  • 10: компилятор принимает код с функциями, представленными в Java SE 10.
  • 11: компиляторпринимает код с функциями, представленными в Java SE 11.
  • 12: компилятор принимает код с функциями, представленными в Java SE 12.

Следовательно, <java.version> должно быть установлено11 для Java 11.

0 голосов
/ 31 января 2019

Вам не нужно упоминать maven-compiler-plugin в вашем POM-файле, если вы хотите указать только версию компилятора.Вместо этого добавьте эти свойства в ваш файл pom

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

Редактировать: Плохо, похоже, свойства номера версии изменились, начиная с версии 3.6 maven-compiler-plugin,Пример выше подходит для Java 8 и ниже.Для java 9 добавьте это свойство:

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

Проверьте принятый ответ на этот вопрос: Указание версии java в maven - различия между свойствами и плагином компилятора

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...