Краткий ответ:
Правильный способ - использовать следующие значения в <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.