资讯动态

IDEA配置SpringBoot开发环境:JDK、Maven与打包运行

发布时间:2026/9/18 12:51:13 来源:尧图企业网站定制
如果你刚把 IntelliJ IDEA 装上打开界面却不知道从哪里点或者照着视频敲完 SpringBoot 代码结果一启动就报错这篇内容就是写给你的。我会把 IDEA 配置 SpringBoot 环境这件事拆成一条能走通的路线先装 JDK再配 Maven然后在 IDEA 里把 SDK、Maven、编码这些基础项一次设置好最后写一个能返回 JSON、能读取配置、能打包成 jar 的简单例子。整个过程不绕弯面向的是刚接触 IDEA 和 SpringBoot 的同学也适合已经用过 Eclipse 或 VS Code、想换到 IDEA 的开发者。环境配置这件事看起来杂其实核心就三样JDK 负责运行Maven 负责拉依赖和构建IDEA 负责写代码和调试。把这三者的关系理清后面不管你是做 SpringBoot 接口、连数据库还是打包 Docker 镜像都不会再被环境问题卡住。1. 先理清思路为什么是 IDEA SpringBoot 这套组合1.1 工具链选型IDEA、JDK、Maven 分别解决什么问题很多人第一次配环境容易把 IDEA、JDK、Maven 混成一件事装完 IDEA 就以为环境好了结果新建项目时提示找不到 JDK或者 Maven 依赖一直下载不下来。我这里用一个厨房的类比IDEA 是厨房的操作台JDK 是灶台和锅具Maven 是采购员和仓库管理员SpringBoot 则是一套半成品菜谱它帮你把常用配菜、调料、火候都提前安排好了。操作台再漂亮没有灶台开不了火有灶台但采购员不干活食材到不了位食材到了菜谱不对做出来的东西也不是你想要的味道。IDEA 的核心价值在于代码补全、跳转、调试、重构和版本控制集成。你写RestController时它能提示注解写application.properties时它能补全配置项启动失败时它能直接定位到某一行堆栈。JDK 是 Java 运行环境SpringBoot 项目最终跑在 JVM 上所以 JDK 版本直接决定你能用哪个版本的 SpringBoot。Maven 负责依赖管理和生命周期构建你在pom.xml里写一个spring-boot-starter-webMaven 会把它以及它依赖的 Spring、Jackson、Tomcat 等一整套 jar 包按版本拉下来。SpringBoot 本身不是替代 Maven 的东西它是在 Maven 或 Gradle 之上通过自动配置和起步依赖让一个 Web 项目从“配一堆 XML”变成“写一个主类就能跑”。我见过不少新手在 IDEA 里建项目时选了 Maven但 Maven 的settings.xml没配镜像结果依赖下载慢到怀疑人生也见过 JDK 装了两个版本IDEA 里项目 SDK 选了一个Maven 编译插件又指定了另一个最后报“无效的目标发行版”。这些问题的根源都不是代码写错而是没搞清工具链的分工。所以别急着写 Controller先把 JDK 和 Maven 在命令行里验证通过再进 IDEA 配置顺序对了后面能省掉大量排查时间。1.2 版本选择别一上来就追最新版版本选择是环境配置里最容易埋雷的地方。SpringBoot 3.x 要求 Java 17 起步SpringBoot 2.7.x 可以跑在 Java 8 上。如果你公司项目还在用 JDK 8或者你跟着老教程学直接上 SpringBoot 3.x大概率会遇到jakarta.servlet找不到、javax.annotation消失、编译插件版本不匹配之类的问题。不是新版本不好而是你的 JDK 和教程生态还没跟上。比较稳的组合是JDK 17 SpringBoot 3.2.x适合新项目JDK 8 SpringBoot 2.7.18适合老项目或保守环境。IDEA 用 2023.3 之后的版本都行社区版也能跑 SpringBoot只是内置的 Spring Initializr 向导和部分 Spring 专属支持不如旗舰版顺手。预算有限就用社区版通过浏览器打开 start.spring.io 生成项目再导入 IDEA效果一样。Maven 建议用 3.8.x 或 3.9.x别用太老的 3.5 以下版本否则有些新依赖的元数据解析会出问题。Maven 和 JDK 之间也有兼容关系Maven 3.9 需要 JDK 8 以上JDK 17 跑 Maven 3.9 没问题。如果你装的是 JDK 21SpringBoot 3.2 也支持但一些第三方库可能还没跟上新手先别折腾。我的建议很直接先确定你的 JDK 版本再反推 SpringBoot 版本最后选 Maven 版本。不要反过来看到最新 SpringBoot 版本号高就硬上结果 JDK 不匹配环境配置直接变成排错现场。1.3 配置顺序先底层再上层避免返工配置顺序我推荐这样第一步装 JDK命令行验证java -version和javac -version第二步装 Maven命令行验证mvn -v同时配置本地仓库和镜像第三步打开 IDEA在全局设置里配 JDK 和 Maven第四步新建或导入 SpringBoot 项目第五步写代码、运行、打包。这个顺序的好处是每一层都有明确的验证点哪一层没过立刻能定位。反过来先建项目再回头改 JDKIDEA 会缓存旧的 SDK 和模块配置改完可能还要手动同步甚至出现编译版本和运行版本不一致。还有一个细节项目路径和 Maven 本地仓库路径尽量别带中文和空格。Windows 下C:\Users\张三\.m2这种路径某些版本的 Maven 或插件解析时会出现乱码。你可以把仓库放到D:/dev/repo这种纯英文路径。编码也要统一IDEA 全局设置里把 File Encodings 全部改成 UTF-8包括 Properties 文件的默认编码。SpringBoot 的application.properties默认按 ISO-8859-1 读如果你在里面写中文可能需要额外配置所以更推荐用application.yml它对中文更友好。这些看似小的设置后面能避免一堆“为什么控制台中文乱码”的问题。2. 把地基打牢JDK、Maven 与 IDEA 的关系2.1 JDK 安装与环境变量验证JDK 下载渠道有两个主流选择Oracle JDK 和 OpenJDK 发行版。新手用哪个都行关键是版本要对。安装时记住安装路径比如D:\dev\jdk-17。安装完成后必须配环境变量Windows 下新建JAVA_HOME指向 JDK 根目录然后在Path里加%JAVA_HOME%\bin。Mac 或 Linux 下在~/.zshrc或~/.bashrc里写export JAVA_HOME/Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home再把$JAVA_HOME/bin加到PATH。配置完打开新的命令行窗口执行java -version javac -version echo %JAVA_HOME%Mac 或 Linux 用echo $JAVA_HOME。如果java -version能输出 17.xjavac -version也能输出 17.x说明 JDK 安装和路径没问题。如果只显示java不显示javac通常是只装了 JRE 或者 Path 没配全。注意环境变量改完要重开终端旧窗口不会自动生效。另一个坑是 Windows 自带一个java.exe在System32里如果你 Path 顺序不对命令行可能调用到系统自带的旧版本。把%JAVA_HOME%\bin放到 Path 靠前的位置能避免这个问题。安装路径尽量不要用中文也不要有空格。有些 Maven 插件在拼接路径时对空格处理不好尤其是后面你要用mvn package打包时路径里的空格可能让构建脚本解析失败。如果你已经装在中文路径下建议卸载重装到纯英文目录。JDK 安装本身不复杂但它是整个环境的地基这一步偷懒后面 IDEA 里选 SDK 时列表一堆乱七八糟的路径找起来也烦。2.2 Maven 下载配置与本地仓库/镜像Maven 去官网下载二进制压缩包解压到D:\dev\apache-maven-3.9.6。同样配MAVEN_HOME再把%MAVEN_HOME%\bin加到 Path。验证命令是mvn -v输出里会显示 Maven 版本和它使用的 Java 版本。这里要特别看一眼 Java version 是不是你想要的 JDK 版本。如果 Maven 用的是 JDK 8而你想用 JDK 17 编译项目后面就会报错。Maven 的配置文件在conf/settings.xml但更推荐复制一份到~/.m2/settings.xml这样升级 Maven 时配置不会丢。关键配置有两块本地仓库和镜像。localRepositoryD:/dev/repo/localRepository mirrors mirror idaliyunmaven/id mirrorOf*/mirrorOf name阿里云公共仓库/name urlhttps://maven.aliyun.com/repository/public/url /mirror /mirrors本地仓库默认在~/.m2/repository时间长了会很大放到 D 盘能减轻 C 盘压力。镜像用阿里云公共仓库下载速度会明显好于默认中央仓库。配置完之后可以在命令行执行mvn help:system看看 Maven 是不是能正常读取 settings.xml 并输出本地仓库路径。如果报错说找不到 settings.xml检查 IDEA 里 Maven 的 User settings file 是否指向了你改的那份。很多人改了conf/settings.xml但 IDEA 默认读的是~/.m2/settings.xml两边不一致结果 IDEA 里依赖还是下载慢。2.3 IDEA 中全局配置 JDK 与 Maven打开 IDEA先不要急着新建项目。找到File - Project Structure - SDKs点加号添加 JDK选中你安装的 JDK 根目录。然后到Settings - Build, Execution, Deployment - Build Tools - Maven把 Maven home path 指向你的 Maven 安装目录User settings file 指向~/.m2/settings.xmlLocal repository 会自动识别。下面有个Work offline不要勾否则 Maven 不会去远程仓库拉新依赖。再检查Settings - Build, Execution, Deployment - Compiler - Java Compiler确保 Target bytecode version 和你的 JDK 匹配。最后到Settings - Editor - File Encodings把 Global Encoding、Project Encoding、Default encoding for properties files 都设成 UTF-8。这些全局配置做完以后新建项目会默认继承。很多人每建一个项目就重新配一遍 Maven其实没必要IDEA 的全局设置对新项目生效。如果你已经打开了项目改完 Maven 设置记得点 Maven 面板里的刷新按钮让项目重新导入依赖。IDEA 右下角会提示 Maven 项目需要导入点Import Changes或Reload project。有时候改完设置没反应可以File - Invalidate Caches / Restart清一下缓存。这个操作不会删代码但会重建索引能解决大部分“配置改了但 IDEA 不认”的怪问题。3. 在 IDEA 里创建第一个 SpringBoot 项目3.1 用 Spring Initializr 新建项目推荐旗舰版 IDEA 自带 Spring Initializr路径是File - New - Project - Spring Initializr。社区版没有这个向导但可以直接打开浏览器访问start.spring.io在网页上选同样的参数点 Generate 下载 zip解压后用 IDEA 的Open打开。参数这样选Project 选 MavenLanguage 选 JavaSpring Boot 选 3.2.x 或 2.7.18Group 填com.exampleArtifact 填demoPackaging 选 JarJava 版本选 17 或 8。Dependencies 里勾选Spring Web它会带入 Spring MVC 和 Tomcat。如果要用 Lombok也可以顺手勾上但新手先不勾少一个变量少一个坑。生成出来的项目结构是标准的 Maven 结构src/main/java放代码src/main/resources放配置和静态资源src/test/java放测试根目录下有pom.xml。IDEA 打开后会开始下载依赖右下角有进度条。第一次下载会比较慢因为要把 SpringBoot 全家桶拉下来。如果卡在某个依赖不动检查 Maven 镜像和网络。下载完成后你会看到DemoApplication.java这个启动类里面有一个main方法。这就是整个项目的入口。3.2 项目结构逐层解读先看pom.xml它通常长这样parent groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-parent/artifactId version3.2.5/version relativePath/ /parent dependencies dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-web/artifactId /dependency /dependenciesspring-boot-starter-parent帮你管理了常用依赖的版本所以你写spring-boot-starter-web时不需要写版本号。spring-boot-starter-web里面包含了 Spring MVC、Jackson、内嵌 Tomcat这就是为什么一个简单项目能直接跑起来 Web 服务。再看src/main/resources里面有一个application.properties目前可能是空的。这个文件用来写端口、数据库连接、日志级别等配置。static目录放静态页面templates放模板文件新手阶段可以先不管。启动类DemoApplication上有SpringBootApplication这个注解是三个注解的组合SpringBootConfiguration、EnableAutoConfiguration、ComponentScan。其中ComponentScan默认扫描启动类所在包及其子包。也就是说如果你的启动类在com.example.demo下那么com.example.demo.controller里的 Controller 会被扫到但com.example.other里的就不会。很多人写了一个 Controller 却访问不到报 404就是因为包放错了位置。根包规则看起来不起眼却是 SpringBoot 项目结构里最基础的一条。3.3 手动补依赖与版本号锁定如果你不用 Initializr也可以手动建 Maven 项目再补依赖。先在 IDEA 里新建一个普通 Maven 项目然后在pom.xml里加 parent 和 starter。手动建项目的好处是你能清楚每一行配置是干什么的坏处是容易漏。比如忘了加spring-boot-maven-plugin项目能编译但java -jar跑不起来因为打出来的 jar 没有主清单属性。这个插件负责把项目打成可执行 jar配置如下build plugins plugin groupIdorg.springframework.boot/groupId artifactIdspring-boot-maven-plugin/artifactId /plugin /plugins /build版本号锁定也很重要。团队协作时如果每个人都用不同的 SpringBoot 版本容易出现“我这里能跑你那里不能跑”。把 parent 版本写死依赖版本尽量交给 parent 管理不要自己乱写版本号。如果需要覆盖某个依赖版本用dependencyManagement或properties统一管理。可以用mvn dependency:tree查看依赖树看看有没有版本冲突。比如你引入了两个库一个依赖 Jackson 2.15另一个依赖 Jackson 2.13Maven 会选择其中一个可能导致运行时NoSuchMethodError。依赖树能帮你提前发现这类问题。4. 写一个能跑的简单例子Hello 配置读取 接口测试4.1 启动类与包扫描规则启动类保持默认即可package com.example.demo; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; SpringBootApplication public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } }这个类必须放在com.example.demo根包下。如果你想调整扫描范围可以在SpringBootApplication后面加scanBasePackages com.example但不建议新手这么干先把包结构放对。启动类里的SpringApplication.run返回一个ConfigurableApplicationContext它代表整个 Spring 容器。启动过程中SpringBoot 会做自动配置发现你引入了spring-boot-starter-web就自动配置内嵌 Tomcat 和 Spring MVC发现你写了application.properties里的server.port就覆盖默认端口。这些自动配置类在spring-boot-autoconfigure包里通过条件注解决定是否生效。4.2 写一个 REST 接口和读取配置在com.example.demo.controller包下新建HelloController.javapackage com.example.demo.controller; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; RestController RequestMapping(/hello) public class HelloController { Value(${app.author:默认作者}) private String author; GetMapping public String hello(RequestParam(defaultValue SpringBoot) String name) { return Hello name , 来自 author; } }然后在application.properties里写server.port8080 app.author老张RestController等于ControllerResponseBody返回值会直接写成 HTTP 响应体而不是跳转页面。RequestMapping(/hello)定义基础路径GetMapping定义 GET 请求。RequestParam用来接收 URL 参数defaultValue保证不传参数时也有默认值。Value(${app.author:默认作者})从配置文件读取app.author冒号后面是默认值如果配置里没写就用“默认作者”。这种写法适合少量配置如果配置项多了建议用ConfigurationProperties绑定到一个类上类型更安全也更好维护。启动后访问http://localhost:8080/hello?nameIDEA浏览器会显示Hello IDEA, 来自 老张。4.3 运行、浏览器/命令行验证与打包在 IDEA 里直接点DemoApplication旁边的绿色三角选择 Run。控制台会输出 SpringBoot 的 banner 和启动日志。看到Tomcat started on port 8080就说明启动成功。如果端口被占用改server.port8081再启动。验证方式有三种浏览器直接访问、命令行 curl、Postman。命令行验证curl http://localhost:8080/hello?nameIDEA返回Hello IDEA, 来自 老张就对了。如果你想让启动 banner 更有意思可以在src/main/resources下放一个banner.txt内容会替换默认 banner。网上有 banner 生成器输入文字就能生成 ASCII 图案但别在这上面花太多时间它不影响功能。真正要掌握的是打包mvn clean package -DskipTests打包完成后target目录下会生成demo-0.0.1-SNAPSHOT.jar用java -jar运行java -jar target/demo-0.0.1-SNAPSHOT.jar如果能正常启动并访问接口说明你的项目不仅能跑还能独立部署。这个过程里Maven 负责编译、测试、打包SpringBoot 插件负责把依赖和主类打进 jar。-DskipTests是跳过测试第一次跑可以先跳过等环境稳定后再去掉。如果你要用 IDEA 打包 Docker 镜像那是后面的事先把 jar 跑通。5. 常见问题与排查技巧实录5.1 启动报错、端口占用、依赖下载失败下面这张表是我在实际操作中整理的高频问题速查表基本覆盖了新手 90% 的启动故障现象可能原因排查与解决启动报Port 8080 was already in use端口被其他程序占用改server.port或找到占用进程结束它报UnsupportedClassVersionErrorJDK 版本低于编译版本检查 IDEA 项目 SDK、Maven 编译插件版本是否一致报无效的目标发行版: 17Maven 用的 JDK 不是 17检查JAVA_HOME和 IDEA Maven Runner 的 JRE依赖一直下载失败镜像没配或网络问题检查settings.xml镜像删除.lastUpdated文件重试启动类找不到包结构不对或没加spring-boot-maven-plugin启动类放根包检查打包插件访问接口 404Controller 不在扫描范围或路径写错确认包在启动类同级或子包检查 URL端口占用在 Windows 下可以用netstat -ano | findstr 8080找到 PID再taskkill /PID 进程号 /F。Mac 或 Linux 用lsof -i:8080然后kill -9 PID。依赖下载失败时去本地仓库把对应目录下的*.lastUpdated文件删掉再在 IDEA 里点 Maven 刷新。如果某个依赖死活下不来可以临时在pom.xml里换一个可用版本但别长期这么干容易埋版本冲突。5.2 IDEA 识别不到依赖/注解变红代码里RestController、Autowired全部标红但项目能编译这种情况通常是 IDEA 的索引或 Maven 配置没同步。先点右侧 Maven 面板的刷新按钮再执行File - Invalidate Caches / Restart。如果还不行检查Settings - Build Tools - Maven里的 Maven home path 和 User settings file 是否指向正确。有时候 IDEA 会默认用自带的 Bundled Maven而你的依赖在自定义 Maven 的本地仓库里两边仓库路径不一样就会找不到。把 Maven 换成你安装的版本Local repository 自动识别后重新导入。如果你用了 LombokData、Slf4j标红需要安装 Lombok 插件并开启注解处理器。路径是Settings - Build, Execution, Deployment - Compiler - Annotation Processors勾选Enable annotation processing。SpringBoot 本身不需要注解处理器但 Lombok 需要。还有一种情况是 JDK 没选对比如项目 SDK 是 17但 Language Level 是 8某些新语法会标红。去Project Structure - Project把 SDK 和 Language Level 统一。IDEA 的缓存问题很常见遇到玄学标红先清缓存重启能省很多查资料时间。5.3 版本冲突与 SpringBoot 版本太高怎么办SpringBoot 版本太高是新手最容易踩的坑。你搜到的教程可能是两三年前的用的是 SpringBoot 2.x而你用 Initializr 默认生成 3.x代码里的javax.servlet全部变成jakarta.servletResource所在的包也可能变化。解决办法有两个一是降级 SpringBoot在pom.xml里把 parent 版本改成2.7.18同时把 JDK 换成 8 或 11二是升级代码把javax.*改成jakarta.*JDK 换成 17。我建议新手先选第一种把项目跑通再慢慢理解版本差异。不要一边学语法一边处理版本迁移容易两头顾不上。版本冲突还可以用mvn dependency:tree查看。如果发现同一个 groupId 下有多个版本可以在pom.xml里用dependencyManagement锁定版本或者用exclusions排除传递依赖。比如某个库带了一个老版本的 Jackson导致 JSON 序列化异常就可以排除它让 SpringBoot 的默认版本生效。改完依赖后一定要重新导入 Maven再重启项目。版本问题往往不是代码问题而是依赖树里某个不起眼的传递依赖在捣乱。6. 我自己的实操习惯和几点经验6.1 项目初始化后先做三件事我现在每次新建 SpringBoot 项目第一件事不是写业务代码而是检查三件事JDK 版本、Maven 仓库、编码格式。JDK 版本决定了能不能用某些新语法Maven 仓库决定了依赖下载快不快编码格式决定了中文会不会乱码。这三件事确认完再写一个最简单的/health接口返回ok。这个接口看起来没用但它能证明 Web 容器启动正常、Controller 扫描正常、端口没有冲突。等这个接口通了再去写真正的业务逻辑出问题时你就能判断是新代码的问题还是环境本身的问题。第二件事是统一配置文件命名。我习惯用application.yml因为层级清晰中文支持也好。如果团队里有人用.properties至少保证编码统一。第三件事是把server.port写进配置不要用默认 8080因为 8080 太容易被其他程序占用。开发环境可以用 8081 或 9090避免和常见服务冲突。这些习惯不高级但能显著减少“为什么我这里跑不起来”的沟通成本。6.2 别把配置写死在代码里新手很容易在 Controller 里写死数据库地址、第三方密钥、业务开关。一旦要换环境就得改代码重新打包非常麻烦。正确做法是把这些值放到application.properties或application.yml里用Value或ConfigurationProperties读取。如果有多套环境可以用application-dev.yml、application-test.yml、application-prod.yml启动时用--spring.profiles.activedev指定。这样同一份 jar 包换一个启动参数就能切换环境。配置和代码分离是 SpringBoot 项目最基本的一条工程习惯。读取配置时少量配置用Value就够了配置项多了就写一个配置类ConfigurationProperties(prefix app) Component public class AppProperties { private String author; private String version; // getter 和 setter }这样类型安全IDE 还能提示补全。注意加了ConfigurationProperties后需要在pom.xml里加spring-boot-configuration-processor依赖才能有元数据提示。这个依赖不引入也能跑只是没有提示。配置写对了后面接数据库、Redis、消息队列时你会发现所有连接信息都能统一管理迁移环境时非常省事。6.3 从简单例子到后续扩展这个 Hello 例子虽然简单但它包含了 SpringBoot 项目的完整骨架启动类、配置、Controller、依赖管理、打包。接下来你可以沿着这个骨架加东西。想连数据库就加spring-boot-starter-data-jpa和 MySQL 驱动在配置文件里写spring.datasource.url想用 Redis就加spring-boot-starter-data-redis注入RedisTemplate想生成接口文档可以加springdoc-openapi想打包 Docker 镜像可以用spring-boot-maven-plugin的build-image目标或者自己写 Dockerfile。每一步都只加一个依赖跑通再继续别一次加一堆出问题都不知道是哪个引起的。我个人的经验是环境配置阶段最值得投入时间的是理解 Maven 的依赖机制和 IDEA 的 Maven 面板。依赖冲突、版本不匹配、仓库配置错误这些问题会伴随整个开发生涯。你越早学会看pom.xml和mvn dependency:tree后面越轻松。至于 SpringBoot 的自动配置原理可以等跑通几个例子之后再去看源码那时候你有了直观感受理解起来会快很多。最后分享一个小技巧如果你不确定某个依赖该不该加先去 Maven 中央仓库搜一下它的最新版本和依赖树再决定要不要引入。环境配置不是一次性的任务而是伴随项目迭代的日常习惯。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价