将Java 11指定为要在Spring(或Spring Boot)pom.xml文件中使用的版本的正确方法是什么?
即,我需要java.version在pom 的属性中添加什么值?
java.version
1.8正如文档所示,对于Java 8,我们使用的是Java 9 1.9。
1.8
1.9
我不确定Java 11是否会1.11(尽管似乎不太可能),而且我已经看到它只是11在使用时指定的maven-compiler- plugin,但是我没有使用编译器插件。
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?
我尝试了两者,但是我的Web服务器似乎可以正确启动并正确编译(IntelliJ显示Information:javac 11.0.2 was used to compile java sources),但是我并不完全相信更改java.version值可以完成任何事情,因为我可以将其设置为eg 100并且一切正常。
Information:javac 11.0.2 was used to compile java sources
100
简短答案:
正确的方法是<java.version>对不同的Java版本使用以下值:
<java.version>
因此,对于Java 11而言,应为:
<properties> <java.version>11</java.version> </properties>
但是,我不确定Java 11是否为“ 1.11”(似乎不太可能),并且在使用maven-compiler-plugin时,我已经将其指定为“ 11”,但是我没有使用编译器插件。
实际上,最后它仍然用于maven-compiler- plugin编译。Springboot只是配置了一个<java.version>属性,这样通过更改此值,您就隐式地将更改为maven- compiler-plugin,<source/>并将<target/>其更改为与在<java.version>:中指定的值相同的值:
maven- compiler-plugin
<source/>
<target/>
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.0</version> <configuration> <source>11</source> <!-- same as <java.version> --> <target>11</target> <!-- same as <java.version> --> </configuration> </plugin>
详细答案:
好像您想要细节说服您。
这是因为每到spring启动项目将扩展父POM spring-boot-starter- parent其定义 <java.version>如下:
spring-boot-starter- parent
<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的编译器插件的文档,maven.compiler.source并且maven.compiler.target是用户属性的<source>和<target>配置参数。由于用户属性的行为,将这两个属性设置为11意味着要设置以下内容:
maven.compiler.source
maven.compiler.target
<source>
<target>
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.0</version> <configuration> <source>11</source> <!-- maven.compiler.source --> <target>11</target> <!-- maven.compiler.target --> </configuration> </plugin>
再次从maven-compiler-plugin 文档中获取,<source>并且<target>是Java编译器()的-sourceand -target参数javac。然后,从javac文档中,我们可以看到这两个参数允许具有以下值:
maven-compiler-plugin
-source
-target
javac
1.6:Java SE 6中未引入语言更改。但是,现在将源文件中的编码错误报告为错误,而不是像Java平台标准版早期版本中那样的警告。 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。