ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

Eclipse搭建Spring Boot开发环境与项目创建实战指南

Eclipse搭建Spring Boot开发环境与项目创建实战指南 在企业级 Java 开发这条路上Eclipse 是个绕不开的老伙计。虽然这几年 IDEA 的呼声越来越高但很多公司的老项目、银行证券类系统、教学环境甚至一些嵌入式团队配套的后台管理端依然跑在 Eclipse 上。而 Spring Boot 作为当前 Java 后端开发的主流框架几乎成了每个后端岗位的必备技能。把这两个东西凑在一起就是这篇要聊的正事怎么在 Eclipse 里从零搭出一套能跑起来的 Spring Boot 开发环境再顺顺利利创建出第一个可启动的项目。这篇内容适合刚入行的 Java 新人、从 IDEA 转过来需要适配公司技术栈的朋友还有那些接手了老项目、发现同事还在用 Eclipse 的同学。我会把版本选型、环境变量、插件、项目创建三条路径、pom 配置、启动调试这些环节都掰开讲踩过的坑也一并摆出来。1. 为什么在 IDEA 满天飞的时代还选 Eclipse 搭 Spring Boot 环境先说个实在话如果你是完全自由的个人开发者追求极致编码体验那 IDEA 确实更顺手。但现实里很多场景不是你能选的。我接过一个维护了七八年的后台系统整个团队统一用 Eclipse 的 Java EE 版本源码里还留着.project、.classpath这些 Eclipse 专属文件换编辑器光是把这些配置对齐就得折腾大半天。还有些单位出于授权合规考虑统一采购的是开源免费的开发工具Eclipse 本身就是这个定位天然适配这类环境。另一个被低估的点是 Eclipse 的插件生态在特定领域依然很强。比如你想看类图Eclipse 装个 ObjectAid 或者用自带的插件就能直接生成想分析内存泄漏MAT 插件是标配想离线安装插件Eclipse 的 dropins 目录丢文件就完事比一些工具省心。所以搭一套 Eclipse 上的 Spring Boot 环境不是怀旧而是解决真实存在的适配问题。1.1 版本选型先定调JDK、Eclipse、Spring Boot 三者的兼容底线这一步是最容易被忽略、也最容易在后期爆雷的地方。很多人是先把 Eclipse 下载好然后随手找了个 Spring Boot 教程就开干结果项目一跑就报java.lang.UnsupportedClassVersionError或者编译级别不匹配。根源就是三者版本没对齐。先把结论摆出来这是一套经得起验证的组合逻辑JDK 8 Spring Boot 2.x最稳的经典组合大量老项目还在用。Spring Boot 2.7.x 是 2.x 系列的收尾版本支持 JDK 8 到 17兼容面最广。JDK 17 Spring Boot 3.x新项目的首选。注意 Spring Boot 3.x 强制要求 JDK 17 起步而且把javax.*包名整体换成了jakarta.*老代码直接搬过来会编译不过。JDK 11 Spring Boot 2.6/2.7中间过渡方案很多公司内网环境卡在 11 这个版本。Eclipse 这边则要认准版本代号Eclipse 2021-09 之后的版本对 JDK 17 支持才比较完善更早的版本在语法提示上会出各种小毛病。表格里我列一下常见搭配直接抄作业就行JDK 版本Spring Boot 版本推荐 Eclipse 版本备注JDK 82.7.182021-06 及以上老项目维护首选JDK 112.7.182022-03 及以上内网过渡环境JDK 173.2.x2023-09 及以上新项目推荐JDK 213.3.x2024-06 及以上尝鲜可上注意如果公司内网 Spring Boot 仓库里只有旧版本别硬上 3.x。我见过有人本地用 3.x 写完部署到内网服务器上因为拉不到spring-boot-starter-parent:3.x直接卡死最后全量降级回 2.7。选型的核心逻辑是向下兼容优先于向上尝鲜。你要保证的不只是本地能跑还要保证和团队、和部署环境一致。所以动手前先问清楚团队用哪个 JDK内网 Maven 仓库有哪些 Spring Boot 版本这两个问题搞明白选型基本就定了。1.2 Eclipse 安装包怎么选从下载到解压的实操细节Eclipse 官网的下载页面对新手其实挺不友好的一堆版本名看得人发懵。核心就记一个原则搭 Spring Boot 开发环境直接选Eclipse IDE for Enterprise Java and Web Developers也就是常说的 Java EE 版本。这个版本自带了 Web、XML、Maven 等一堆企业开发要用的工具集省得你后面一个个补插件。安装方式上Windows 平台有两种一种是下载 Installer 在线安装另一种是下载 zip 压缩包解压即用。我个人强烈推荐后者zip 包拿来直接用不写注册表换电脑直接拷走多版本共存也方便。你可以在 D 盘建个dev-tools目录把不同版本的 Eclipse 分别解压到eclipse-2023-09、eclipse-2024-06这样的子目录里需要哪个就启动哪个。启动前有个小细节Eclipse 默认会去读系统环境变量里的 JDK但如果你的机器装了多个 JDK就容易用错。所以更稳妥的做法是在 Eclipse 安装目录下建一个eclipse.ini在里面显式指定 vm 路径比如-vm D:/dev-tools/jdk-17/bin/javaw.exe这行的位置有讲究必须放在-vmargs之前否则不生效。这个坑我当年调了半小时才发现-vm参数放错位置Eclipse 会默默忽略它然后拿系统默认 JDK 启动后面编译级别全乱套。还有个被频繁搜到的需求是 Eclipse 汉化。实话说做开发不太建议汉化因为报错信息、API 文档、社区问答全是英文汉化之后反而对不上号。如果你确实需要可以装 Babel 语言包同样支持离线方式下载对应版本的 Babel 压缩包解压后把plugins和features目录里的内容拷到 Eclipse 对应目录重启就生效。这种离线玩法在内网环境里特别实用因为很多公司不允许开发机随意连外网。2. Eclipse 环境初始化那些装完就报错的前置坑环境初始化这一步说难不难说简单也真能坑人。我见过太多新手Eclipse 装完、项目也建了一运行就一堆红叉然后到处问为什么我的 Spring Boot 跑不起来。其实十有八九是初始化没做干净。这一章我按顺序把 JDK、编码、Maven 这几件事捋清楚每一步都给出为什么要这么做的理由。2.1 JDK 安装与环境变量配置的关键动作JDK 本身安装没什么技术含量一路下一步就行但有个流传很广的误区要澄清网上有些老教程建议在PATH里配置CLASSPATH变量还让加一堆.;%JAVA_HOME%\lib\dt.jar之类的。这套配置在 JDK 8 之后基本是多余的现代 JDK 不需要手动配CLASSPATH配了反而可能引入意外的类加载顺序问题。所以只配两个就够JAVA_HOME指向 JDK 根目录PATH里追加%JAVA_HOME%\bin。配置完验证一下开命令行敲java -version和javac -version两个版本号必须一致。如果你发现java是 8、javac是 17说明 PATH 里混进了别的 JDK 的 bin 目录得把顺序调对。这种java 和 javac 版本不一致的问题会让 Eclipse 编译用一个版本、运行用另一个版本排查起来非常绕。在 Eclipse 里还要再确认一次。打开Window Preferences Java Installed JREs看看列出来的是不是你想用的那个 JDK。如果里面是个 JRE 而不是 JDK建议删掉重新添加 JDK 目录因为 JRE 里没有编译器和调试符号做开发会缺东西。这一层是配置的配置很多人忘了这步结果项目全局编译级别被锁死在默认值上。2.2 编码格式、编译器合规级别两处必改配置编码是中文开发者最容易踩的坑没有之一。Eclipse 默认的工作空间编码在英文系统下往往是 ISO-8859-1 或者 GBK而你写 Spring Boot 项目时application.yml、messages.properties里的中文还有控制台输出全靠 UTF-8。编码不对轻则中文乱码重则 YAML 解析直接报错。改的位置在Window Preferences General Workspace把Text file encoding改成 UTF-8。同时把General Editors Text Editors Spelling里那个拼写检查关掉不然代码里的变量名动不动被划红线看着心烦。另外 JSP 文件如果你混着写的编码要单独在Web JSP Files里设成 UTF-8。编译器合规级别则对应你的 JDK 版本。位置在Java Compiler把Compiler compliance level设成和 JDK 一致的版本。比如你用 JDK 17这里就选 17。这里如果选错了会出现两种典型现象选低了JDK 17 的新语法比如记录类、文本块报语法错误选高了但 JDK 是 8编译直接报 compliance level 不受支持。这个设置和项目级别的设置要区分开后面讲到项目属性时会再提。2.3 插件安装在线与离线两条腿走路Eclipse 装 Spring Boot 支持主流是装 STS 插件。名字叫 Spring Tools它提供 Spring Starter Project 向导、配置文件提示、运行面板等一堆顺手的工具。在线安装走Help Eclipse Marketplace搜 Spring Tools点安装重启即可。但内网环境或者网络不稳的时候在线安装经常卡在 Calculating requirements 就不动了。这时候就得用离线安装。离线包的来源是 Eclipse 官方更新站点下载对应版本的 zip 归档然后走Help Install New Software Add Archive选中 zip 文件安装。另一种更粗暴的方式是把插件解压后直接丢进 Eclipse 的dropins目录重启自动识别这种方式对某些插件管用但 STS 这种依赖较多的还是走 Install New Software 更稳。不管在线还是离线装完记得验证新建项目时如果能看到Spring Starter Project这个选项就说明成功了。另外提醒一句STS 插件版本和 Eclipse 版本要匹配跨大版本装容易出问题比如在很老的 Eclipse 上装最新 STS可能启动就报插件依赖缺失。实操心得如果你的 Eclipse 装了太多插件导致启动变慢可以在Window Preferences General Startup and Shutdown里把用不到的功能项关掉启动速度能有肉眼可见的提升。3. 创建 Spring Boot 项目的三条路径与实操对比环境备好了接下来就是建项目。这里我把三条常用路径都讲一遍你可以根据自己的网络条件、团队习惯和对工具的熟悉程度来挑。三条路径各有各的适用场景没有绝对的好坏。3.1 路径一Spring Initializr 网页生成再导入这是最通用、也最推荐新手先走一遍的方式。因为你在浏览器里勾选依赖的时候能直观看到 Spring Boot 生态里有哪些 starter相当于做一次生态科普。操作流程打开 Spring 官方的 Initializr 页面按顺序选四样东西——项目类型选 Maven、语言选 Java、Spring Boot 版本按前面聊的兼容性选、然后填 Group 和 Artifact。Group 一般用公司域名倒写比如com.exampleArtifact 是项目名全小写加连字符。接着在右侧 Dependencies 里勾你需要的最基础的至少勾一个Spring Web。有个容易忽略的细节是打包方式Packaging默认 Jar。Spring Boot 项目绝大多数用 Jar因为内嵌了 Tomcat打进 Jar 里直接java -jar就能跑。只有极少数需要部署到外部容器比如老的 WebLogic才用 War。选 Jar 就对了。生成之后你会得到一个 zip解压后用 Eclipse 的File Import Maven Existing Maven Projects导入。导入时那个 Disable Maven nature 的复选框别勾勾了项目就不是 Maven 项目了。导入完成后Eclipse 会开始下载依赖第一次会比较慢耐心等进度条走完红叉自然消失。3.2 路径二STS 插件直接新建 Spring Starter Project装好 STS 插件后File New Spring Starter Project接下来的界面和网页版 Initializr 很像本质上是插件内嵌了同样的服务。这种方式的好处是不用离开 Eclipse一步到位生成完直接就在工作空间里。但它有个前提你的机器能访问 Spring 的初始化服务。有些公司网络做了限制插件请求不到那个服务就会一直转圈然后报错。这种情况下就退回路径一用浏览器如果浏览器能访问或者让能访问的同事帮忙生成。另外离线状态下也可以用手工方式也就是路径三。STS 向导里还有一个选项叫Use default location如果你有统一的代码目录建议取消勾选指定到自己的工作区路径别一股脑全塞进 Eclipse 默认的 workspace 里。统一目录便于后面用 Git 管理、用命令行构建工程化习惯早点建立没坏处。3.3 路径三手工改造 Maven 项目并手写 pom.xml这条路径最能锻炼人对 Spring Boot 结构的理解也最适合完全没有外网、连生成页面都打不开的环境。做法是先File New Maven Project勾上Create a simple project快速建一个空的 Maven 工程然后手动编辑pom.xml把 Spring Boot 的父依赖和 starter 加上最后自己补启动类。手写 pom 的时候父依赖是关键parent groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-parent/artifactId version2.7.18/version relativePath/ /parent这个父依赖帮你管理了几乎所有常用库的版本所以你在引入 starter 时基本不用写版本号这就是 Spring Boot 约定优于配置 的体现。如果你不想或不能用父依赖比如项目本身已经继承了别的父 pom那就改成在dependencyManagement里导入spring-boot-dependencies的 BOM效果类似只是要自己管插件配置。三条路径的对比我整理成一个表按场景选就行路径适用场景优点缺点Initializr 网页有外网、新手学习直观、依赖一目了然需切浏览器STS 插件新建常态开发全在 IDE 内完成依赖网络服务手工 Maven 改造内网、离线完全可控、理解深步骤多、易漏配置4. pom.xml 与启动类的核心细节拆解项目建出来只是骨架真正决定它能不能跑、跑得顺不顺的是 pom 配置和启动类这两块。这一章我把里面的关键点逐个拆开尤其是那些教程里没讲但实际会踩的地方。4.1 starter 依赖怎么选别一股脑全勾Spring Boot 的精髓是把一堆相关依赖打包成一个 starter。比如spring-boot-starter-web里其实包含了 Spring MVC、内嵌 Tomcat、Jackson 等一串东西你引一个就等于引了一打。理解了这一点选依赖就不会盲目。常见 starter 和作用对照如下starter作用典型场景spring-boot-starter-webWeb 内嵌 Tomcat写接口、做后台spring-boot-starter-data-jpaJPA Hibernate操作数据库spring-boot-starter-thymeleaf模板引擎服务端渲染页面spring-boot-starter-test测试框架单元测试spring-boot-starter-data-redisRedis 集成缓存、会话新手常见的问题是贪多把所有能勾的都勾上。结果项目一启动因为某个 starter 需要额外配置比如 JPA 没配数据源直接启动失败。我的建议是初始只勾 Web先跑通 Hello World再按需求逐个加。这样每加一个都清楚它带来了什么变化出问题也好定位。依赖冲突也是绕不开的话题。当你引入多个 starter它们各自依赖的第三方库版本可能打架。Eclipse 里可以用Dependency Hierarchy视图看依赖树把冲突的依赖找出来用exclusions排除掉多余的那个。步骤是打开 pom切到 Dependency Hierarchy 标签找到带omitted字样的节点右键 Exclude Maven Artifact 即可。4.2 启动类与 SpringBootApplication 背后的自动装配启动类就三行代码但每一行都有讲究SpringBootApplication public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } }SpringBootApplication是个组合注解拆开看等于三个SpringBootConfiguration标记为配置类、EnableAutoConfiguration开启自动装配、ComponentScan扫描当前包及子包下的组件。自动装配是 Spring Boot 最核心的能力它靠spring.factories3.x 之后改成AutoConfiguration.imports文件在一堆条件注解的约束下决定哪些配置类生效。比如你引了 web starter它检测到类路径里有DispatcherServlet就把 Web 相关的自动配置全激活了。启动类的位置有个隐形规则它必须放在所有业务代码包的最外层。因为ComponentScan默认只扫启动类所在包及其子包你把启动类放到com.example.demo.controller下面那 service、dao 全都扫不到启动后接口 404。这个错我曾经帮人排查了一晚上最后发现就是启动类挪了位置。主方法里的SpringApplication.run返回的是ConfigurableApplicationContext早期教程喜欢写ApplicationContext ctx SpringApplication.run(...)其实规范写法是SpringApplication.run(DemoApplication.class, args)不需要接收返回值。另外主类最好放在独立包下别和其他配置类混在一起结构清晰。4.3 application.yml 与几个马上能用的配置项配置文件优先用application.yml比.properties层级清晰。Eclipse 里写 yml 需要装 YEdit 之类的插件才有提示和格式校验否则缩进错了它只会在启动时报解析异常。YAML 对缩进极其敏感两个空格是层级用 Tab 会报错这是血的教训。一个最小可用的配置长这样server: port: 8080 servlet: context-path: /demo spring: application: name: demo-appserver.port改端口这个最常用本地起多个项目时避免冲突。context-path给应用加统一前缀接口访问就变成http://localhost:8080/demo/xxx。spring.application.name看着没用其实后面接入注册中心、链路追踪时会用到早点填上有备无患。配置文件的加载顺序也值得知道Spring Boot 会依次读application.yml、application-{profile}.ymlprofile 的配置优先级更高。所以你可以把通用配置放主文件把环境相关的数据库地址、Redis 地址放application-dev.yml、application-prod.yml再用spring.profiles.active切换。这样本地连本地库、部署连生产库一份代码走天下。日志配置也顺手提一句默认控制台已经能打日志了。想调级别加一行logging.level.com.exampledebug就行不用额外引 logback 配置文件除非你要做日志分文件、按天切割这种精细控制。5. 运行调试与打包Eclipse 里的操作手感项目能建、配置也对接下来就是让它真正跑起来。Eclipse 里运行 Spring Boot 项目和普通 Java 程序略有不同调试和热部署也有自己的注意事项。5.1 启动、断点调试与 DevTools 热部署运行最简单的方式是右键启动类Run As Java Application控制台打出那朵著名的 Spring 图案 banner 和Started xxxApplication in x seconds就说明起来了。有时候你会看到控制台还提示 LiveReload server is running那是因为你引了 DevTools它带了一个实时刷新功能。断点调试和普通 Java 一样在代码行号旁边双击加断点然后用Debug As Java Application启动。这里有个 Eclipse 相比其他工具的优势调试时可以直接在Variables视图里修改变量值或者对表达式做Inspect排查那些诡异分支进了不该进的逻辑特别好用。热部署靠spring-boot-devtools依赖实现加在 pom 里dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-devtools/artifactId optionaltrue/optional /dependency加完之后改 Java 代码保存DevTools 会检测到 classpath 变化自动重启应用。但注意Eclipse 默认不会自动编译所以有时候你改了代码却看不到重启需要手动Project Build Automatically打开自动编译或者 CtrlS 后按一下 CtrlB。这个改了代码不重启的现象困扰过很多人根子就在 Eclipse 的自动编译开关上。注意DevTools 的自动重启只对 classpath 下的变更有效。你改application.yml一般不会触发重启改 Java 类才会。另外正式打包时记得把optional保持为 true避免 DevTools 被打进生产包。5.2 打包成 Jar 与命令行运行开发调通了就要考虑打包。Eclipse 里对着项目右键Run As Maven build...在 Goals 里填clean package点 Run 就行。第一次会下载插件慢一点正常。构建成功后target 目录下会生成xxx-0.0.1-SNAPSHOT.jar。这个 jar 是可执行胖包内嵌了 Tomcat 和所有依赖拷到任何装了 JDK 的机器上执行java -jar demo-0.0.1-SNAPSHOT.jar就能跑。想换端口临时加参数java -jar demo.jar --server.port9090。想指定 profilejava -jar demo.jar --spring.profiles.activeprod。命令行参数优先级高于配置文件这是做临时调整的利器。打包时如果报 Unable to find main class八成是启动类位置不对或者 pom 里没配spring-boot-maven-plugin。用 Initializr 或 STS 生成的项目默认会带这个插件手工建的项目要自己补上build plugins plugin groupIdorg.springframework.boot/groupId artifactIdspring-boot-maven-plugin/artifactId /plugin /plugins /build这个插件负责把依赖打进 jar 并设置正确的 Main-Class缺了它打出来的就是普通 jar跑不起来。6. 常见问题与排查技巧实录下面这些是我这些年实际遇到、也被别人问得最多的报错整理成速查表遇到时对号入座能省不少时间。6.1 启动即报错的高频问题速查表现象可能原因解决方式UnsupportedClassVersionErrorJDK 版本低于编译版本对齐 JDK 与编译器级别启动类找不到主方法无 main 或没有 spring-boot 插件检查启动类与 pom 插件端口 8080 被占用已有进程占用改 server.port 或结束进程接口全 404启动类位置太深把启动类上移到最外层包YAML 解析失败缩进用了 Tab 或中文冒号全用空格、英文符号依赖飘红未更新 Maven 或仓库缺包右键 Maven Update Project其中接口 404和依赖飘红是新人问得最多的两个。前者基本就是包扫描路径问题后者多半是本地仓库没下全或者 settings.xml 里的镜像配置有问题。Eclipse 里的 Maven 要单独确认一下Window Preferences Maven User Settings指到你自己的settings.xml别用默认的默认的经常连不上内网私服。6.2 Spring Boot 版本太高的降级操作热词里 springboot版本太高 这个搜索很典型。症状通常是启动时报某个自动配置类找不到或者提示不支持当前 JDK。原因要么是 JDK 太老配了新框架要么是引用了只兼容旧版本的第三方库。降级操作分两步。第一步改父依赖版本把spring-boot-starter-parent的 version 从 3.x 改回 2.7.x。第二步清掉本地仓库里对应的旧缓存因为有时候降级后 Maven 仍然用着之前下好的新版本 jar导致行为诡异。做法是去本地仓库~/.m2/repository/org/springframework/boot下删掉对应版本目录再 Update Project 重新拉。实操心得降级前务必先确认javax和jakarta的问题。Spring Boot 3.x 用的是jakarta.*2.x 用的是javax.*。如果你代码里 import 的是jakarta.servlet.*降级到 2.x 会全部编译不过得批量替换包名。反过来升级也一样这个包名切换是大版本升级最耗时的环节。6.3 几个能省时间的独家避坑技巧第一学会看Conditions Evaluation Report。启动时加--debug参数控制台会详细打印每个自动配置类的生效与否以及原因排查为什么某个功能没自动配好时这比瞎猜高效得多。第二善用 Eclipse 的Open TypeCtrlShiftT和Open ResourceCtrlShiftR。找类、找配置文件秒开尤其是接手陌生项目时比在目录树里一层层点快得多。第三碰到eclipse 找不到或无法加载主类这类问题先检查Project Clean一下再确认Build Path里的输出目录是不是被改乱了。Eclipse 有时候抽风会把编译输出路径重置clean 一下能解决很大一部分玄学报错。第四团队协作时统一 Eclipse 的代码格式化模板。Java Code Style Formatter导入团队的 xml 模板否则每个人格式化出来的代码空格、换行都不一样提交代码时 diff 里全是格式变动真正的业务改动反而被淹没。第五本地起多个 Spring Boot 项目做联调时端口规划要提前做。我一般是主服务 8080、子服务从 8081 往后排Redis、MySQL 这些中间件端口也记在项目的 README 里别人接手不用一个个问。说实话Eclipse 搭 Spring Boot 这套流程第一次走确实会磕磕绊绊版本对齐、编码设置、启动类位置这几关几乎人人都会卡一次。但一旦环境配顺了日常开发其实很稳尤其是老项目维护场景Eclipse 那套成熟的调试和插件体系是真能提效。我自己的习惯是每配好一套环境就写个简短的配置清单存在项目根目录下次换机器或者带新人照着清单二十分钟就能复刻一套。这个清单里除了版本组合还会记上eclipse.ini的 vm 配置、编码设置项、以及那个容易被忽略的自动编译开关位置省得每次重新摸索。
返回列表