springboot java8升级至java17包含maven、java、springboot、idea全部设置过程
Spring Boot 3已经发布,官方说明需要使用java17、Spring Framework 6作为最低版本,Maven 支持也提高到了 3.5、Gradle 提高到了 7.3,版本管理器默认也换成了 Gradle。因此我开始将springboot项目从java 8迁移至java 17,由于做Android开发时使用Gradle 时的下载速度让人窒息,因此我还是选择使用Maven,而Spring Boot 2.5.5是Spring Boot 第一个支持Java 17的版本,所以将项目升级至最新的SpringBoot 2.7.1版本,以下是全过程记录。
目标和准备
目标配置Java17、Java8共存环境,配置IDEA,运行SpringBoot 2.7.1项目。
查看你的IDEA版本,我当前为2021.3,此版本支持java17、支持Maven3.8.2(Maven3.8.6最新版会报错),如果你的IDEA低于此版本,建议先升级。
一、windows安装java17与java8共存、centos安装java17
1. java17下载
下载链接(https://www.oracle.com/java/technologies/downloads/#jdk17-windows)
2. java17配置系统变量与java8共存
下载完成后,解压至目标文件夹 C:\Program Files\Java,可以看到分别有java8和java17两个目录。
打开计算机→属性→高级系统设置→环境变量。
看看系统变量有没有JAVA_HOME,有的话先删除,然后重新创建三个系统变量:
1.JAVA17_HOME
JAVA17_HOME
C:\Program Files\Java\jdk-17.0.3.1
2. JAVA8_HOME
JAVA8_HOME
C:\Program Files\Java\jdk1.8.0_311
4. JAVA_HOME
JAVA_HOME
%JAVA17_HOME%
(环境变量“JAVA_HOME”,变量值设置为“%JAVA8_HOME%”或者“%JAVA17_HOME%”,分别代表切换至不同的java环境)
然后编辑系统变量Path,添加:
%JAVA_HOME%\bin
%JAVA_HOME%\jre\bin
并且上移至最前面,(或者%JAVA_HOME%\bin放到最前面即可)
打开cmd,输入 java -version,查看当前java版本,如果切换不成功,则需要重启电脑后再次查看。如果仍然切换失败,检查上述过程,查看系统变量中的目录是否写错。
3.centos8 安装 java17
1. 卸载原有openjdk环境
查看java目录
[root@r01 ~]which java
/usr/bin/java
[root@r01 ~]# rpm -qa |grep jdk
copy-jdk-configs-3.3-10.el7_5.noarch
java-1.8.0-openjdk-1.8.0.312.b07-1.el7_9.x86_64
java-1.8.0-openjdk-headless-1.8.0.312.b07-1.el7_9.x86_64
如果有自带openjdk,使用rpm卸载
rpm -e --nodeps java-1.8.0-openjdk-1.8.0
rpm -e --nodeps java-1.8.0-openjdk-headless-1.8.0
使用yum卸载
yum -y remove java-1.8.0-openjdk
输入:java -version 查看是否卸载成功
bash: java: command not found...
2. 下载、解压、移动jdk压缩包
wget https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.tar.gz
tar -zxvf jdk-17_linux-x64_bin.tar.gz
mv jdk-17.0.3.1 /usr/bin/java17
3. 环境变量
两种方式
- 进入profile文件,
vim /etc/profile
在文件最下方添加
export JAVA_HOME=/usr/bin/java17
export PATH=$PATH:$JAVA_HOME/bin;
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar;
- 在/etc/profile.d 目录中存放的是一些应用程序所需的启动脚本,其中包括了颜色、语言、less、vim及which等命令的一些附加设置。
这些脚本文件之所以能够 被自动执行,是因为在/etc/profile 中使用一个for循环语句来调用这些脚本。而这些脚本文件是用来设置一些变量和运行一些初始化过程的。
cd /etc/profile.d
vim java.sh
export JAVA_HOME=/usr/bin/java17
export PATH=$PATH:$JAVA_HOME/bin;
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar;
#保存后
chmod 755 /etc/profile.d/java.sh
作为额外的临时环境变量,方法二更合适,避免污染初始环境变量。
完成后重新加载环境变量
source /etc/profile
cd /
[root@r01 ~]# java -version
java version "17.0.3.1" 2022-04-22 LTS
Java(TM) SE Runtime Environment (build 17.0.3.1+2-LTS-6)
Java HotSpot(TM) 64-Bit Server VM (build 17.0.3.1+2-LTS-6, mixed mode, sharing)
二、安装并配置Maven 3.8.2
这里需要注意下载的版本是否是你的IDEA版本支持的Maven版本
1. Maven 3.8.2下载
Maven官网
点击 Download 拉到最底下,下载历史版本
下载后解压到目标目录 C:\Program Files\Maven
2. 配置系统变量
添加系统变量
MAVEN_HOME
C:\Program Files\Maven\apache-maven-3.8.2
编辑系统变量Path,添加
%MAVEN_HOME%\bin
3. 配置阿里云公共镜像、Java17
打开Maven安装目录下的conf文件夹,我这里是C:\Program Files\Maven\apache-maven-3.8.2\conf,复制此处settings.xml到其他目录,编辑,删去中默认的内容,添加阿里云公共仓库;中添加java17版本:
<mirrors>
<mirror>
<id>aliyunmaven</id>
<mirrorOf>*</mirrorOf>
<name>阿里云公共仓库</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
</mirrors>
<profiles>
<profile>
<id>jdk-17</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>17</jdk>
</activation>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<maven.compiler.compilerVersion>17</maven.compiler.compilerVersion>
</properties>
</profile>
</profiles>
放回原目录。C:\Program Files\Maven\apache-maven-3.8.2\conf
打开cmd,输入
mvn -v
4. IDEA中Maven设置
进入Idea File->settings…->Build,Execution,Deployment->Build Tools->Maven,
Local repository建议设置到非系统盘目录。
因为maven build项目时,就有可能将remote repository里的jar文件下载到local repository,你会发现这个目录下的文件会越来越多。
还需要配置另两个地方:Runner和Importing内选择Java17
三、配置IDEA和相关项目 java17环境
1. 配置IDEA环境
- Setting设置
- project Structure设置
- 重点:
如果编译项目出现 java: 无效的源发行版: 17,则需要设置:
2. 配置项目pom.xml
pom.xml主要内容:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.1</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<java.version>17</java.version>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<mybatis-plus.version>3.4.3</mybatis-plus.version>
<druid.version>1.1.17</druid.version>
</properties>
<dependencies>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-controls</artifactId>
<version>17.0.1</version>
</dependency>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-fxml</artifactId>
<version>17.0.1</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
<dependency>
<groupId>org.jetbrains</groupId>
<artifactId>annotations</artifactId>
<version>RELEASE</version>
<scope>compile</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.2</version>
<configuration>
<skipTests>true</skipTests>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.7.1</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>17</source>
<target>17</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
<!--允许maven创建xml文件,否则xml要放在resources里-->
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
</build>
</project>
四、报错解决
1. Maven中Plugins中全部是红线
需要点击左上角Reload按钮
2. 运行项目出现 无效的源发行版: 17
此问题很多原因,首先cmd运行mvn -v,查看使用的的java版本,如果不是java17,重复上述Maven配置过程。
如果没问题,查看你项目目录 External Libraries 外部库中,使用的是不是Java17,如果不是,则重复上述过程 三 中的重点。
3. 成功运行后,IDEA报错之Failed to start bean ‘documentationPluginsBootstrapper
考虑依赖版本冲突问题,比如swagger2。
- 升级spring-boot-starter-parent版本
- 更改application.yaml
增加配置
mvc:
pathmatch:
matching-strategy: ant_path_matcher
如果使用的是application.properties,则在properties文件加上:
spring.mvc.pathmatch.matching-strategy=ant-path-matcher