Aca*_*lco 14 java spring pom.xml maven spring-boot
将Java 11指定为要在Spring(或Spring Boot)pom.xml文件中使用的版本的正确方法是什么?
即,我需要java.version在pom 的属性中添加什么值?
1.8正如文档所示,对于Java 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>
Run Code Online (Sandbox Code Playgroud)
我到处搜索,找不到答案,因为我阅读的几乎所有文档以及与Java版本有关的博客文章仅显示版本8或版本9。
那我该怎么用呢?1.11还是只是11?
我尝试了两者,但我的Web服务器似乎可以正确启动并正确编译(IntelliJ显示Information:javac 11.0.2 was used to compile java sources),但是我并不完全相信更改java.version值可以完成任何事情,因为我可以将其设置为eg 100并且一切正常。
我能找到的唯一相关问题是:与Java 11兼容的最低Spring版本,由于使用OpenJDK 11 迁移到JDK 11和Spring 4.3.x 之后,由于Hibernate错误而导致Spring Boot失败,但是它们并没有真正引起人们的注意。
Ken*_*han 30
简短答案:
正确的方法是<java.version>对不同的Java版本使用以下值:
因此,对于Java 11而言,应为:
<properties>
<java.version>11</java.version>
</properties>
Run Code Online (Sandbox Code Playgroud)
但是,我不确定Java 11是否为“ 1.11”(似乎不太可能),并且在使用maven-compiler-plugin时,我已经将其指定为“ 11”,但是我没有使用编译器插件。
实际上,最后它仍然用于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>
Run Code Online (Sandbox Code Playgroud)
详细答案:
好像您想要细节说服您。
这是因为每到春季启动项目将扩展父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>
Run Code Online (Sandbox Code Playgroud)
从行家编译-插件文档,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>
Run Code Online (Sandbox Code Playgroud)
从maven-compiler-plugin 文档再次,<release>并且<source>是-release和-source参数的Java编译器(javac)。然后从javac docs中,我们可以看到这两个参数允许具有以下值:
- 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 11 <java.version>应该设置11为。
小智 7
我将其添加为答案,以便对更多人有帮助:
从 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>
Run Code Online (Sandbox Code Playgroud)
这篇maven-compiler-plugin文章对于使用JDK 11很有帮助。
如果有人希望在gradle项目中将Java 11 指定为要在 Spring(或 Spring Boot)中使用的版本,则在 build.gradle 文件中使用 sourceCompatibility = '11' 或 sourceCompatibility = '1.11'
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 {
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11833 次 |
| 最近记录: |