【SpringBoot教程】IDEA快速搭建正确的SpringBoot版本和Java版本的项目

🙋大家好!我是毛毛张!
🌈个人首页: 神马都会亿点点的毛毛张

🍉今天毛毛张分享的是在做SpringBoot项目中遇到的三个问题,这三个问题看似都是小问题🍓,但是却是做项目的基础常识⚠️

文章目录

  • 1.问题🥝
  • 2.使用IDEA快速搭建正版SpringBoot版本和JDK版本的项目🥑
    • 2.1 查看SpringBoot依赖的JDK版本🍅
    • 2.2 主流的SpringBoot和JDK版本的对应关系
    • 2.3 SpringBoot 2和SpringBoot 3有什么区别
  • 3.快速切换JDK版本🥥
    • 3.1 配置不同的JAVA_HOME
    • 3.2 安装两个版本的Java显示Java版本总是高的那个版本
  • 4.使用IDEA快速创建SpringBoot 2.x版本的项目🍒
    • 4.1 使用阿里云的国内源创建SpringBoot2.x版本的项目
    • 4.2 拥抱变化,手动修改成SpringBoot 2.x 和JDK8
  • 参考文献🥜

1.问题🥝

问题1️⃣:

  • 我们在通过Maven构建Java项目或者使用源代码进行Java编译时,常常遇到JDK版本和SpringBoot版本不匹配的问题,导致编译失败,比如出现如下错误:
org/springframework/beans/factory/InitializingBean.class
[ERROR]     类文件具有错误的版本 61.0, 应为 55.0
[ERROR]     请删除该文件或确保该文件位于正确的类路径子目录中。
/org/springframework/boot/autoconfigure/AutoConfigureAfter.class
[ERROR]     类文件具有错误的版本 61.0, 应为 55.0
[ERROR]     请删除该文件或确保该文件位于正确的类路径子目录中。
  • 这类错误的原因是:你本地的JDK版本太低,而项目里面使用的SpringBoot版本太高了,解决这个问题要么提升JDK版本,要么降低SpringBoot版本。但是如何查看SpringBoot版本和JDK版本的对应的关系呢?

问题2️⃣:

  • 不同的项目可能需要不同的SpringBoot版本,不同的SpringBoot版本可能需要不同的Java版本,当我们系统里面安装了多个Java版本的时候,如何快速切换呢?

问题3️⃣:

  • SpringBoot 2.X版本在2023年11月24日停止维护了,因此创建SpringBoot项目时不再有2.X版本的选项,只能从3.1.X版本开始选择。而SpringBoot 3.X版本不支持JDK8,最低支持JDK17,因此JDK8也无法主动选择了。那么怎么解决这个问题呢?
    image-20241229180024491

2.使用IDEA快速搭建正版SpringBoot版本和JDK版本的项目🥑

2.1 查看SpringBoot依赖的JDK版本🍅

  • 首先打开Spring官方网站:https://spring.io/,点击菜单栏Projects下的Spring Boot,然后点击LEARN页签,查看主流的SpringBoot版本
    image-20241229160538633

官网上不同版本对应的不同的标识,不同版本标识的意义

  • CURRENT:代表了当前版本,最新发布版本,里程碑版本。

  • GA:通用正式发布版本,同release。

  • SNAPSHOT:快照版本,可用但非稳定版本。

  • PRE:预览版本。

  • **M版本:**M1,M2,M3中的M是milestone的简写,这个单词是里程碑的意思。

  • Alpha:也被称为内部测试版或预览版,这些版本通常不会对外部用户公开,因为它们可能包含许多尚未修复的漏洞和不完整的功能。通常只有开发团队和其他内部相关人士才能访问和使用 Alpha 版本。

  • Beta:是一种公开测试版,位于 Alpha 版本之后。这个阶段的版本通常会加入新功能,并且相较于 Alpha 版本来说会更加稳定。Beta 版本主要面向特定的用户群体进行测试,如合作伙伴、潜在客户或早期采用者。

  • 然后查看Reference Doc.,比如我们想查看SpringBoot 3.0.13版本,点击Reference Doc.进入参考详情页面。
    image-20241229160910361

  • 接着点击新页面左侧的[Getting Started](https://docs.spring.io/spring-boot/docs/3.0.13/reference/html/getting-started.html" /l "getting-started)菜单
    image-20241229161057158

  • 接着点击左侧的2. System Requirements菜单,就可以看到SpringBoot版本对应的Java JDK版本:Spring Boot 3.0.13 requires Java 17 and is compatible up to and including Java 21. Spring Framework 6.0.14 or above is also required.(Spring Boot 3.0.13 要求使用 Java 17,并且兼容至包括 Java 21 在内的版本。同时,也需要使用 Spring Framework 6.0.14 或更高版本。)
    4-查看springboot3依赖jdk版本

2.2 主流的SpringBoot和JDK版本的对应关系

Spring Boot 版本Jdk版本Spring Framework 版本
Spring Boot 1.3.x - Spring Boot 1.5.xJava JDK 7 及以上版本
Spring Boot 2.0.x - Spring Boot 2.3.xJava JDK 8 及以上版本
Spring Boot 2.4.xJava JDK 11 及以上版本
Spring Boot 2.5.xJava JDK 16 及以上版本
Spring Boot 2.7.18Java JDK 8版本—21版本Spring Framework 5.3.31+
Spring Boot 3.0.13Java JDK 17版本-21版本Spring Framework 6.0.14+
Spring Boot 3.1.8Java JDK 17版本-21版本Spring Framework 6.0.16+
Spring Boot 3.2.2Java JDK 17版本-21版本Spring Framework 6.0.13+
Spring Boot 3.3.0-M1Java JDK 17版本-21版本Spring Framework 6.0.13+

2.3 SpringBoot 2和SpringBoot 3有什么区别

  • 最低环境的区别
    • Java版本:SpringBoot2的最低版本要求为Java8,支持Java9;而SpringBoot3决定使用Java17作为最低版本,并支持Java19。
    • Spring Framework 版本: SpringBoot2基于Spring Framework5开发;而SpringBoot3构建基于Spring Framework6之上。
  • GraalVM支持的区别 :相比SpringBoot2,SpringBoot3的Spring Native也是升级的一个重大特性,支持使用GraalVM将Spring的应用程序编译成本地可执行的镜像文件,可以显著提升启动速度、峰值性能以及减少内存使用。
  • 片Banner支持的区别:在SpringBoot2中,自定义Banner支持图片类型;而现在Spring Boot3自定义Banner只支持文本类型(banner.txt),不再支持图片类型。
  • 依赖项的区别:相比SpringBoot2,Spring Boot3.0.0-M1删除了对一些附加依赖项的支持,包括Apache ActiveMQ、Atomikos、EhCache2和HazelCast3。Jersey是另一个值得注意的弃用,在它提供对Spring Framework6的支持之前已被删除。
  • 除了上述内容外,相比SpringBoot2,SpringBoot3还增加了很多其它的新特性,如:Java EE已经变更为Jakarta EE、Log4j2增强、三方包升级等。

3.快速切换JDK版本🥥

  • 看了上面我们发现如果使用较低的SpringBoot版本的时候,我们需要将系统JDK版本切换到JDK8,当我们系统中存在多个版本的时候如何快速切换呢?
  • 毛毛张在这里就不讲述JDK的安装教程了,如果还熟悉JDK的安装教程了可以参看毛毛张的这个教程:Java学习笔记 | JavaSE基础语法 | 0 | Java入门概述
  • 下面毛毛张将介绍Windows系统下安装和随意切换多个版本的JDK

3.1 配置不同的JAVA_HOME

  • 大部分情况下,可以通过以下两个环境变量来确定当前应用程序使用的是哪个 Java 版本:
    • JAVA_HOME:多数脚本使用该环境变量来确定 Java 版本的位置。
    • Path:当从控制台运行 Java 二进制文件(如 java 和 javac)时,使用的是该环境变量
  • 在只有一个 JDK 的情况下,Windows 只需要在环境变量中配置 JAVA_HOME,并且在 PATH 中配置 bin 的位置,这样就可以在任意目录下使用 java 命令了。只需配置 bin 目录即可,不必配置 jre 目录。
  • 当我们安装了多个JDK的时候,这里假设电脑上下载了 JDK 8 和 JDK 17 两个版本,他们的安装路径分别为 D:\software\IDE\Java\JDK\JDK1_8D:\software\IDE\Java\JDK\JDK17,这是毛毛张的安装配置,如下图:
    image-20241229172940359
  • 操作步骤:
    • 增加一个名字叫 JAVA_HOME8 的环境变量,使其指向目录 D:\software\IDE\Java\JDK\JDK1_8
    • 增加一个名字叫 JAVA_HOME17 的环境变量,使其指向目录 D:\software\IDE\Java\JDK\JDK17
    • 修改原来的 JAVA_HOME(没有的话就新增一个),使其值指向你想使用的 JDK 版本,比如我想使用 JDK 17,那就设置其值为 %JAVA_HOME17%,这样就不需要动之前Path环境变量中配置好的%JAVA_HOME%\bin

image-20241229173211916

image-20241229173420674

  • 最后保存环境变量配置,然后打开一个新的命令行窗口输入 java --version 即可看到当前使用的 java 版本了
  • 每次当我们切换JDK版本的时候,只需要修改JAVA_HOME的值就行,如果需要使用JDK8就将JAVa_HOME替换成%JAVA_HOME8%
    image-20241229173533765

3.2 安装两个版本的Java显示Java版本总是高的那个版本

  • 这个问题困惑了毛毛张许久,原因在于安装 JDK 时使用了 .exe 安装包版本。在安装过程中,Windows 系统会自动将最后安装的 JDK 设置为系统默认的版本,因此每次切换 JDK 时,系统仍然会显示安装的最高的那个版本。
  • 当尝试配置低版本 JDK 时,使用 java --version 命令时,可能会看到依然是高版本的 JDK,而低版本 JDK 没有生效。这是因为 java --version 命令会根据环境变量 PATH 来查找 Java 可执行文件,而默认路径中的 java 可能指向了安装的最高版本。
  • 但是不必担心,只要修改了正确的环境变量并在 IDEA 中选择了相应的 JDK 版本,就不会出现版本不一致的错误了。这个问题可以通过以下步骤解决:
    • 修改环境变量 JAVA_HOMEPATH,确保指向你想要使用的低版本 JDK 路径。
    • 在 IDE(如 IntelliJ IDEA)中,手动选择对应的 JDK 版本。IDEA 会读取你配置的环境变量,并使用你选择的 JDK 版本。
  • 由于不影响使用,所以毛毛张就没用去解决了,如果你们安装的也是exe版本的,想解决这个问题,解决方案可以参看下面在两篇文章:
    • 安装两个版本的Java显示Java版本总是高的那个版本 安装多个版本的jdk
    • https://blog.csdn.net/weixin_39068791/article/details/108140194

4.使用IDEA快速创建SpringBoot 2.x版本的项目🍒

4.1 使用阿里云的国内源创建SpringBoot2.x版本的项目

  • 在使用IDAE的快速创建工具SpringBoot的时候,把创建项目页面上面的Server URL修改成https://start.aliyun.com,原始的是https://start.spring.io
    image-20241229180212974
  • 然后就可以愉快的创建项目了,需要注意的是,通过阿里云创建的项目,初始结构与通过Spring官方创建的项目有所不同,但完全不影响使用

4.2 拥抱变化,手动修改成SpringBoot 2.x 和JDK8

  • 首先修改pom.xml文件
    image-20241229180716904
  • 修改Project Struture,此处也修改成JDK8
    image-20241229180830462
    image-20241229180840421
  • Modules这里也修改成JDK8
    image-20241229181813263
  • 这里也需要修改:
    image-20241229180954375
  • 都修改完毕后记得点击Apply,再点击OK
  • 修改Settings
    image-20241229181040095
    image-20241229181050144

参考文献🥜

  • https://blog.csdn.net/nadeal/article/details/136504100#:~:text=Spring Boot各版本对应,JDK 11 及以上版本。
  • https://www.cnblogs.com/hibpm/p/18297051
  • https://www.hsuyeung.com/article/how-to-install-multiple-jdk-and-switch-version
  • https://www.cnblogs.com/hibpm/p/18297051
  • https://www.hsuyeung.com/article/how-to-install-multiple-jdk-and-switch-version
  • https://blog.csdn.net/dream_ready/article/details/134639886

都看到这了,不妨一键三连再走吧!

🌈欢迎和毛毛张一起探讨和交流!
联系方式点击下方个人名片

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/497689.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MultiDiff 论文解读

一、CameraCtrl AnimateDiff->MotionCtrl->CameraCtrl CameraCtrl将多帧图像的Plucker射线输入到Camera Encoder,Plucker射线可以表示每个像素对应的光线方向。 Camera Encoder包括ResNet block和Temporal Attention,来提取每一帧相机位姿的时序…

C语言性能优化:从基础到高级的全面指南

引言 C 语言以其高效、灵活和功能强大而著称,被广泛应用于系统编程、嵌入式开发、游戏开发等领域。然而,要写出高性能的 C 语言代码,需要对 C 语言的特性和底层硬件有深入的了解。本文将详细介绍 C 语言性能优化的背后技术,并通过…

用点包图洞察医学数据:以血压分析为例

在医学数据分析的广袤天地里,可视化手段无疑是我们快速洞察数据、挖掘关键信息的有力 “武器”。今天,就来给各位医学同仁介绍一种别具一格的可视化图表 —— 点包图(Diverging Dotplot),顺便分享一段用 Python 实操绘…

python爬虫----爬取视频实战

python爬虫-爬取视频 本次爬取,还是运用的是requests方法 首先进入此网站中,选取你想要爬取的视频,进入视频页面,按F12,将网络中的名称栏向上拉找到第一个并点击,可以在标头中,找到后续我们想要…

C# 中使用 MassTransit

在生产环境中使用 MassTransit 时,通常需要进行详细的配置,包括设置连接字符串、配置队列、配置消费者、处理重试和错误队列等。以下是一个完整的示例,展示了如何在 ASP.NET Core 应用程序中配置 MassTransit,包括请求/响应模式和…

【Hackthebox 中英 Write-Up】Manipulating a CRUD API | 操控 CRUD API:一步步提取 Flag

Objective | 目标 This challenge demonstrates how to interact with a CRUD API to perform Update, Delete, and Search operations to retrieve the flag. 本次挑战旨在演示如何与 CRUD API 交互,通过执行 更新、删除 和 搜索 操作来获取 Flag。 操控 CRUD AP…

【OpenGL ES】GLSL基础语法

1 前言 本文将介绍 GLSL 中数据类型、数组、结构体、宏、运算符、向量运算、矩阵运算、函数、流程控制、精度限定符、变量限定符(in、out、inout)、函数参数限定符等内容,另外提供了一个 include 工具,方便多文件管理 glsl 代码&a…

【Compose multiplatform教程18】多平台资源的设置和配置

要正确配置项目以使用多平台资源,请执行以下操作: 添加库依赖项。 为每种资源创建必要的目录。 为限定资源创建其他目录(例如,深色 UI 主题或本地化字符串的不同图像)。 依赖项和目录设置 要访问多平台项目中的资源…

线索二叉树的实现(c语言)

一、前言:什么是二叉树的线索化?(为什么要有二叉树的线索化?) 通过前面内容的学习,我们知道了二叉树的存储结构其实是通过二叉链表的方式实现的。但二叉链表由于每个结点均有左右孩子域,这使得…

通过python对excel进行数据分析和可视化

import pandas as pd import matplotlib.pyplot as plt import seaborn as snsfile_path "C:\\Users\\86138\\Desktop\\book_list-计算机-机器学习-linux-android-数据库-互联网.xlsx" data pd.read_excel(file_path)need_data data[[书名, 评分, 评价人数]].copy…

考研互学互助系统|Java|SSM|VUE| 前后端分离

【技术栈】 1⃣️:架构: B/S、MVC 2⃣️:系统环境:Windowsh/Mac 3⃣️:开发环境:IDEA、JDK1.8、Maven、Mysql5.7 4⃣️:技术栈:Java、Mysql、SSM、Mybatis-Plus、VUE、jquery,html 5⃣️数据库可…

SpringCloud整合skywalking实现链路追踪和日志采集

1.部署skywalking https://blog.csdn.net/qq_40942490/article/details/144701194 2.添加依赖 <!-- 日志采集 --><dependency><groupId>org.apache.skywalking</groupId><artifactId>apm-toolkit-logback-1.x</artifactId><version&g…

【Spring】 Bean 注入 HttpServletRequest 能保证线程安全的原理

文章目录 前言1. 图示2. 源码坐标后记 前言 今天看了一段老业务代码&#xff0c;HttpServletRequest 被注入后直接用于业务逻辑。 好奇Spring是如何解决线程安全问题。 Controller public class TestController {ResourceHttpServletRequest request;ResponseBodyGetMapping(…

0基础学前端-----CSS DAY11

0基础学前端-----CSS DAY11 视频参考&#xff1a;B站Pink老师 今天是CSS学习的第十一天&#xff0c;今天开始的笔记对应Pink老师课程中的CSS第六天的内容。 本节重点&#xff1a;CSS定位 本章目录 0基础学前端-----CSS DAY11本节目标1. 定位1.1 为什么需要定位1.2 定位组成1.…

frameworks 之 WMS添加窗口流程

frameworks 之 触摸事件窗口查找 1.获取WindowManager对象2.客户端添加view3. 服务端添加view (NO_SURFACE)4.重新布局 (DRAW_PENDING)4.1 创建 SurfaceControl 5.通知绘制 (COMMIT_DRAW_PENDING&#xff0c; READY_TO_SHOW&#xff0c; HAS_DRAWN)5. 1 布局测量和刷新 6.总结 …

ARM单片机定时器

定时器分类 定时器资源。基于GD32F103

【Java】IO流练习

IO流练习 题干&#xff1a; 根据指定要求&#xff0c;完成电话记录、 注册、登录 注册 题干&#xff1a; 完成【注册】功能&#xff1a; 要求&#xff1a; 用户输入用户名、密码存入users.txt文件中 若users.txt文件不存在&#xff0c;创建该文件若users.txt文件存在 输入…

Windows API Set:那些“只存在但不被使用“的DLL

API Set 是什么&#xff1f; 想象一下&#xff0c;Windows就像一个大型图书馆&#xff0c;而API Set就是这个图书馆的索引系统。但这个索引系统非常特别&#xff1a;它是直接内置在Windows加载器中的"虚拟目录"。 // 一个典型的API Set映射示例 api-ms-win-core-mem…

小程序配置文件 —— 12 全局配置 - pages配置

全局配置 - pages配置 在根目录下的 app.json 文件中有一个 pages 字段&#xff0c;这里我们介绍一下 pages 字段的具体用法&#xff1b; pages 字段&#xff1a;用来指定小程序由哪些页面组成&#xff0c;用来让小程序知道由哪些页面组成以及页面定义在哪个目录&#xff0c;…

正则表达式 - 使用总结

以下列出了一些常用正则表达式的使用总结&#xff1a; 匹配基本字符 使用普通字符匹配&#xff1a;普通字符&#xff08;如字母、数字、符号&#xff09;在正则表达式中表示自身&#xff0c;例如匹配 "runoob"&#xff1a;/runoob/。 使用元字符 . 匹配任意字符&…