1. 先别急着点Next:2023版IDEA创建SpringBoot前的三个关键认知
最近在技术群里又看到不少人问"在2023版IDEA里怎么创建SpringBoot项目",很多新同学照着网上老教程点半天,要么找不到入口,要么生成后启动就报错。其实问题往往不是操作错,而是没搞懂2023年这个时间点上的几种环境差异。我先说三个必须提前知道的事,能避开大部分坑。
1.1 IDEA版本差异:Ultimate版和Community版的本质区别
IntelliJ IDEA主要分两个版本:Community(社区版,免费)和Ultimate(旗舰版,收费)。很多人用的是社区版,但在Spring Boot项目创建这件事上,两个版本是有本质区别的。
- Ultimate版:内置Spring Initializr向导,你可以在新建项目时直接选Spring Boot,图形化填写依赖,一键生成项目骨架。这是网上绝大多数教程默认的情况。
- Community版:默认没有Spring Boot项目创建入口,而且从IDEA 2021之后,JetBrains把Spring插件收归旗舰版专享,社区版即使手动装插件也装不上Spring Initializr。但这不代表社区版不能开发Spring Boot——你完全可以从网页生成项目,再用社区版以Maven项目方式导入,照样能写能跑。
所以第一步先确认一下自己装的是哪个版本。打开IDEA,菜单栏Help -> About,可以看到完整版本号,如果你的版本名称里带"Community",那后面创建项目的路径就要走网页方案,这个我在第4部分展开说。
1.2 Spring Boot版本选择:2023年该用哪个版本,为什么"版本太高"会坑你
2023年你打开start.spring.io,默认推荐的往往是Spring Boot 3.x的最新稳定版,比如3.1或3.2。很多新手图省事直接选默认,结果项目一创建,报错一堆。为什么?这里有个关键知识点:
- Spring Boot 3.0起,底层要求JDK17及以上。如果你本机装的是JDK8或JDK11,选了3.x根本编译不过。
- Spring Boot 3.x把许多包名从
javax.*迁移到了jakarta.*,比如javax.servlet变成jakarta.servlet。这意味着市面上很多基于旧版写的教程、代码片段不能直接复制粘贴。 - 一些第三方依赖(比如某些旧版数据库驱动、老的分页插件、旧版连接池)还没有适配Spring Boot 3.x,用起来会出现莫名其妙的兼容问题。
所以我的建议非常直接:如果是初学者,或者只是为了完成课设、公司常规业务项目,首选Spring Boot 2.7.x。2.7是2023年仍然长期维护的2代版本,JDK8就能跑,教程多、坑少、三方库兼容性最好。等你对Spring全家桶熟了,再切3.x不迟。
在IDEA新建项目的向导里,Spring Boot版本那栏是可以下拉选择的,别用默认值。
1.3 JDK与Maven:项目能不能跑起来的基础配置
创建Spring Boot项目之前,先确保本地环境有这四样:JDK、Maven、IDEA插件、网络。
JDK方面,如果你决定用Spring Boot 2.7,JDK8或JDK11都稳妥;如果用3.x,必须JDK17+。本机没有对应JDK的,可以在File -> Project Structure -> SDK -> Add JDK里添加指定的JDK安装目录,也可以指针自动下载。IDEA 2023支持到JDK21,所以不用愁没地方装。
Maven方面,IDEA是自带Maven的,不需要单独安装——但自带Maven用的中央仓库地址在国外,国内下载依赖时常卡死。哪怕你项目创建流程全走对,依赖拉不下来一样白搭。强烈建议提前配好Maven镜像,这个配置细节我会在第5部分专门讲,这里先提一句。
还有一个很多人忽略的点:创建项目时IDEA的Project SDK设置和Modules SDK设置要一致。我见过有人全局JDK是17,但项目Module里还是老的1.8,结果编译期报错。创建项目的时候,看清楚右上角的SDK下拉框再点Next。
把这三个认知搞清楚了,再开始创建项目,你后面至少少踩一半的坑。
2. 完整实操:在IDEA 2023中创建一个Spring Boot项目的全流程
这里以IDEA 2023.2以上版本、Ultimate版为例(社区版路径见第4部分)。我尽量把每个按钮的位置、每个参数的含义说清楚,你跟着点就可以了。
2.1 新建项目:从界面到项目骨架生成
打开IDEA后,主界面选New Project。如果你已经打开了一个项目,可以File -> New -> Project。此时会弹出一个向导窗口,关键是左侧项目类型这一栏:
- 选择
Spring Boot(不同版本IDEA可能写Spring Initializr或Spring Boot,本质一样)。 - 右侧SDK选择你已经配好的JDK版本(用2.7就选1.8或11,用3.x就选17)。
Server URL这里默认是https://start.spring.io。如果网络不好,可以改成阿里云的https://start.aliyun.com,它能生成Spring Boot 2.x版本项目,速度更快,但对3.x的选择支持会滞后。这个问题不大,我们本来也推荐2.x。- 点Next进入参数填写页。
这一步最常见的失败就是Server URL连不上。如果卡在加载界面很久,要么网络断了,要么被墙了(注意我这里说的是网络问题,不是让你干什么,就是告诉你检查连通性)。可以换个网络环境,或者直接改用阿里云URL。
2.2 关键参数怎么填:Group、Artifact、项目名、包名的门道
进入参数填写页后有这几个字段:
| 字段 | 含义 | 填写建议 |
|---|---|---|
| Group | 组织标识,一般写成公司域名的倒序 | 比如com.example,课设可以写com.demo |
| Artifact | 项目标识,一般就是项目名 | 比如blog-system,小写+中划线 |
| Type | 构建工具 | 选Maven(Gradle也可以,但Maven更大众) |
| Language | 语言 | Java |
| Name | 项目名称 | 最好和Artifact一致,避免混淆 |
| Package name | 包名 | 通常自动生成,格式就是Group + Artifact的组合,比如com.example.blogsystem。注意Artifact里如果有中划线,包名里会自动去掉中划线 |
| Project location | 项目存放位置 | 选个路径好记的目录,别放桌面上临时文件夹 |
这里最容易被忽略的是Package name。包名是Java类的namespace,决定了Spring Boot扫描组件的基础包。后面写代码时所有Controller、Service都要放在这个包或其子包下,不然Spring扫不到。所以建议起一个有辨识度的包名,比如com.myblog.article。
2.3 依赖选型:Web、DevTools、数据库驱动等初学者的标准搭配
点Next之后是Dependencies(依赖)选择页,左边是分类,右边是已选列表。对于绝大多数初学者或者课设项目,我建议按下面这个最小集来选:
- Spring Web:必选,提供Spring MVC和内置Tomcat,没有它Web项目起不来。
- Spring Boot DevTools:强推,改代码后实现热重启,极大提升开发效率。不过注意,它只对开发环境友好,生产环境记得排除。
- Lombok:简化实体类的getter/setter,可选但推荐,前提是IDEA里要装Lombok插件,还要开启Annotation Processing。
- MySQL Driver:如果你要连数据库就选,配合JDBC或JPA使用。
- Spring Data JPA(或MyBatis):如果要写数据访问层,按你项目习惯选。JPA是Spring官方标准化方案,MyBatis是国内主流。二选一即可,别都选。
- Spring Boot Actuator:生产环境监控用,新手暂时可以不选,以后再加。
选定后点Next,然后Finish,IDEA就开始从远程下载项目模板并生成骨架。第一次创建可能很慢,因为要拉取很多依赖,耐心等,同时顺便把第5部分的Maven镜像先配好。
2.4 首次启动:验证项目真的能跑起来
项目生成后,找到src/main/java包下带有@SpringBootApplication注解的类,文件名一般是项目名Application.java。右键这个类,选Run 'xxxApplication'。
启动时观察控制台日志,看到类似这样的输出就说明成了:
Tomcat started on port(s): 8080 (http) with context path '' Started DemoApplication in 2.124 seconds (process running for 2.134)然后浏览器访问http://localhost:8080,如果页面显示Whitelabel Error Page,不要慌——这恰恰证明应用已经正常启动,只是还没有写Controller。你可以新建一个TestController:
package com.example.demo; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class TestController { @GetMapping("/hello") public String hello() { return "Hello Spring Boot!"; } }刷新页面访问http://localhost:8080/hello,看到Hello Spring Boot!说明你的Spring Boot项目已经彻底跑通了。
3. 项目生成之后:Spring Boot项目结构拆解与运行原理
很多新手项目创建完,看着一堆目录和文件发懵,然后就开始随便乱放类,结果启动报错。我先带你把这套结构看明白,你就知道哪些文件能动、哪些不能乱动。
3.1 核心目录结构与关键文件
一个标准的Spring Boot Maven项目,生成后目录大概是这样:
demo ├── src │ ├── main │ │ ├── java/com/example/demo │ │ │ ├── DemoApplication.java │ │ │ └── (your packages) │ │ └── resources │ │ ├── static # 静态资源(css、js、图片) │ │ ├── templates # 模版文件(Thymeleaf等) │ │ └── application.properties │ └── test/java/com/example/demo │ └── DemoApplicationTests.java ├── target # 编译输出目录,自动生成 ├── pom.xml # Maven配置文件,项目依赖核心 └── .mvn / mvnw # Maven Wrapper,保证构建环境一致重点说两个:
pom.xml:所有依赖都在这里管理。你以后加任何第三方库(比如Redis、EasyExcel),都往<dependencies>里加坐标。IDEA在pom.xml里支持自动补全,输入开头字母就能提示。application.properties:配置文件的默认位置。端口、数据库连接、日志级别、各种自定义参数都写在这里。位置固定,就别乱挪。
还有.gitignore,如果你准备用Git管理项目,这个文件别删,IDEA也默认生成好了。
3.2 启动类与自动配置的简单理解
那个带有@SpringBootApplication的类是项目的入口。注解本身是三个注解的组合:@SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan。你可以把它理解成一个打包好的开关:
@EnableAutoConfiguration负责"猜"你要什么配置。比如你pom里加了spring-boot-starter-web,它就自动帮你配置Tomcat和Spring MVC;加了数据库相关,它就自动配置数据源。@ComponentScan负责扫描当前包及其子包下所有带@Component、@Service、@Repository、@Controller等注解的类。
所以千万记住:你的Controller、Service、Config这些类都要放在启动类所在包或它的子包里,放错位置,扫描不到,接口直接404。
3.3 配置文件application.properties还是application.yml
Spring Boot支持再种格式:application.properties和application.yml。两个都行,IDE默认生成的是properties,但个人更推荐用yml格式,因为支持层级结构,看着清爽,尤其配置类多的时候。
比如配置端口和上下文路径:
server: port: 8081 servlet: context-path: /api等价于properties写法:
server.port=8081 server.servlet.context-path=/api如果要切换到yml,直接右键resources目录,New -> File,命名为application.yml,然后删掉原有的properties即可。注意别两个文件同时存在,Spring Boot会以properties为准,但它俩同时放容易让人困惑。
4. 没有Spring Initializr的社区版IDEA怎么办:可用方案对比
前面说过,IDEA社区版无法直接通过向导创建Spring Boot项目。但办法总比困难多,这里给出三种可行方案,按推荐程度排序。
4.1 用start.spring.io网页生成项目的完整步骤
这是最接近官方推荐的方式,完全免费,不依赖IDEA版本,浏览器打开就行。
- 浏览器访问
https://start.spring.io(网络慢或连不上的话,就用https://start.aliyun.com)。 - 选择Project(Maven)、Language(Java)、Spring Boot版本(建议选2.7.x,别选3.x)。
- 填Group、Artifact、Dependencies,操作和IDEA向导一模一样。
- 点击
GENERATE按钮,浏览器会下载一个zip压缩包。 - 解压后,打开社区版IDEA,选
File -> Open,直接选中这个解压后的文件夹。 - IDEA识别到里面有
pom.xml,弹窗提示是否以Maven项目导入,选Open as Project,耐心等依赖下载完。
之后你就能像Ultimate版一样写代码、运行main方法。除了创建那一步需要在网页上操作,后面没有任何区别。
4.2 用阿里云镜像加速Spring Boot依赖下载
不管从哪个入口创建项目,最终的依赖下载都要通过网络。国内访问Maven中央仓库速度极不稳定,你不把这个配置好,光等依赖下载就能耗尽你所有的热情。
配置方法很简单:找到你本地Maven的conf/settings.xml(我一般是把IDEA自带的Maven,或者自己下载的Maven 3.8.x的路径记下来,直接用它的settings.xml)。在<mirrors>标签里加入:
<mirror> <id>aliyunmaven</id> <mirrorOf>central</mirrorOf> <name>阿里云公共仓库</name> <url>https://maven.aliyun.com/repository/central</url> </mirror>然后回到IDEA菜单File -> Settings -> Build, Execution, Deployment -> Build Tools -> Maven:
Maven home path:选择你改了settings.xml的那个Maven安装路径。User settings file:勾选Override,并指定到那个settings.xml。Local repository:会自动识别,确认一下路径没有奇怪的权限问题。
做完后点Apply,再刷新项目。你会发现依赖下载速度直接起飞,这个配置能治80%的"项目卡在建索引/卡在下载依赖"问题。
4.3 从GitHub等模板仓库导入:另一种思路
如果你不想每次都用网页生成,可以从Gitee或GitHub上找一个自己信任的"Spring Boot基础框架"模板仓库,git clone下来,然后改一下pom.xml里的groupId、artifactId、项目名,再File -> Open导入。这样做的好处是模板里可能已经集成了通用返回体、全局异常处理、MyBatis Plus等常用配置,省事;坏处是你需要能看懂别人的代码,不然出问题都不知道在哪改。
对新手,我不太推荐这条路径,因为你还没能力区分"模板里哪些是必须的、哪些是多余的"。老老实实用start.spring.io完事儿。
5. 高频问题排查:版本太高、下载超时、启动报错、IDEA卡顿
创建Spring Boot项目的坑,撑起我写这篇文章的80%理由。这些问题你在官网教程里很少看到集中讲解,但在真实开发里几乎天天见。
5.1 "Cannot start internal HTTP server"背后的原因与解决
用IDEA 2023的朋友应该不陌生,有时打开IDEA会弹出Cannot start internal HTTP server,后面还跟一句类似Port already in use: 63342。这个Internal HTTP Server是IDEA用来跑JavaScript调试、源码插桩、插件通信用的内置服务,端口固定为63342。
出现这个报错,最常见的几个原因和对应处理:
- 端口被占用:别的应用占了63342端口。在命令行执行
netstat -ano | findstr 63342(Windows)或lsof -i:63342(macOS)查一下。如果是你自己的PID,可以在任务管理器里结束掉;如果查不到,就换IDEA的内置端口。 - IDEA网络代理设置有问题:在
Settings -> System Settings -> HTTP Proxy里,如果选了Manual proxy configuration但填了非道义的代理地址,很可能导致内部通信链接失败。改成Auto-detect proxy settings,或者在没有内网要求时选No proxy。 - IDEA配置缓存损坏:
File -> Invalidate Caches -> 勾选Clear file system cache and Local History -> Invalidate and Restart。
我的习惯是先试方案3,因为前两个排查耗时。失真了缓存往往就消失了。
5.2 依赖下载慢或失败:Maven仓库镜像配置
好多同学项目创建完,右下角一直转圈,然后报Could not resolve dependencies错误。不用怀疑,就是Maven拉取依赖失败了。除了前面配阿里云镜像外,还有两个细节:
- 确保settings.xml里的
<mirrorOf>是central,有的老教程写*,会把所有远程仓库都指向阿里云,包括某些仅存在于特殊仓库的插件,反而更麻烦。 - 如果你觉得阿里云还不够快,可以把
maven.aliyun.com的仓库换成https://maven.aliyun.com/repository/public(它是central和jcenter的聚合),兼容性更好些。
另外,Maven Wrapper(mvnw)在IDEA里第一次点击运行时会自动下载Maven发行版,也可能因为网络问题卡住。我一般是直接把Maven Wrapper对应的.mvn/wrapper/maven-wrapper.properties里改为你本地Maven,或者干脆在运行配置里使用本地Maven路径,别依赖Wrapper。
5.3 Spring Boot版本过高导致的启动失败或配置不兼容
这几种现象,基本可以判断是版本过高造成的:
- 启动时提示
Invalid source release 17:你选了Spring Boot 3.x,但JDK没切到17。 - 代码里
import javax.sql.DataSource;报红:Spring Boot 3.x下很多包已经迁移到jakarta命名空间。把javax改成jakarta就行(但前提是依赖版本也支持)。 - 某个第三方starter(比如旧版
pagehelper-spring-boot-starter)依赖拉取下来后,运行期报类找不到:老库没适配Boot 3。
解决思路不是硬熬,而是降低坑数。直接重开项目,选Spring Boot 2.7.x,你会发现舒服很多。如果工作环境硬性要求3.x,再逐个确认第三方依赖的兼容版。
5.4 IDEA启动项目特别慢:JVM参数调优和编译优化
很多人的电脑配置不差,但IDEA加载一个Spring Boot项目要一分钟起步,跑起来还卡。可以从三处调:
- 调整IDEA本身的内存:
Help -> Edit Custom VM Options,打开idea64.exe.vmoptions,把-Xmx至少调到2048m,建议4096m(具体看电脑内存)。改完重启IDEA立刻能感受到变化。 - 关闭不常用的插件:
Settings -> Plugins,把不需要的(比如部分云原生插件、行动开发插件)统统Disable。插件越多,索引越多,启动越慢。 - 排除编译索引范围:项目右键
Mark Directory as -> Excluded,把target、node_modules等目录索引排除掉。这样IDEA不会一直试图索引无关文件。
另外,Spring Boot热部署配合DevTools时,有时候会频繁重启导致缓慢,如果你只是改了个注释它也重启,可以把Settings -> Build -> Compiler -> Build project automatically和Developer Tools -> DevTools -> Restart Delay调成800ms,减少无用的重启。
最后再分享一个小习惯
按我自己的经验,创建Spring Boot项目这件事,本身不难,难点全在环境协同。所以我现在每到一个新环境,第一件事不是急着开IDEA,而是先检查JDK、Maven、镜像这些"地基",地基稳了再创建项目,基本一次通过。后面有新的Spring Boot版本、新的IDEA版本出来时,我也不会第一时间升级,先让子弹飞一会儿,等别人踩完坑再动。上面写到的每一条,都是我自己实打实趟过的,照着做能帮你省下不少跟报错对峙的时间。