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. 环境变量

两种方式

  1. 进入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;
  1. 在/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 拉到最底下,下载历史版本
在这里插入图片描述
![在这里插入图片描述](https://img-blog.csdnimg.cn/4719b838a5894a3d8f650a6d7e27e3f1.png

在这里插入图片描述
下载后解压到目标目录 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环境

  1. Setting设置
    在这里插入图片描述
  2. project Structure设置
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  3. 重点:
    如果编译项目出现 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。

  1. 升级spring-boot-starter-parent版本
  2. 更改application.yaml
    增加配置
mvc:
    pathmatch:
      matching-strategy: ant_path_matcher

如果使用的是application.properties,则在properties文件加上:

   spring.mvc.pathmatch.matching-strategy=ant-path-matcher
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐