不灭的焱

革命尚未成功,同志仍须努力 下载Java

作者:AlbertWen  添加时间:2026-03-02 17:44:50  修改时间:2026-03-03 06:22:15  分类:07.Java框架/系统  编辑

最后的解决方案

因为项目的多模块架构,需要在“项目根目录”下,先执行:

mvn compile
mvn clean install

再在“启动模块”中运行:

cd ./fuyo-launch
mvn spring-boot:run

 


一、豆包的回答

你遇到的问题是通过 mvn spring-boot:run 命令启动项目时,运行的仍然是旧的代码,新修改的内容没有生效。这是 Spring Boot 开发中很常见的问题,主要和 Maven 的编译机制、Spring Boot 的热部署特性有关。

问题原因与解决方案

1. 核心原因

mvn spring-boot:run 命令默认会直接运行已编译好的 class 文件,如果你的新代码没有被重新编译,自然就会执行旧代码。

2. 解决方案(按推荐优先级排序)

方案一:先编译再运行(最直接)

在执行 spring-boot:run 之前,先执行编译命令,确保新代码被编译为最新的 class 文件:

# 先清理旧的编译产物,再编译,最后运行
mvn clean compile spring-boot:run
  • clean:删除 target 目录(旧的编译产物)
  • compile:重新编译最新的代码到 target 目录
  • spring-boot:run:运行最新的编译产物
方案二:启用 Spring Boot 热部署(开发效率最高)

如果想在开发过程中修改代码后无需重启即可生效,可以配置热部署:

  1. pom.xml 中添加热部署依赖:
    <dependencies>
        <!-- Spring Boot 热部署依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
    </dependencies>
    
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <!-- 启用热部署 -->
                    <fork>true</fork>
                </configuration>
            </plugin>
        </plugins>
    </build>
  2. 配置完成后,执行 mvn spring-boot:run 启动项目,后续修改代码后:
    • IDEA:按 Ctrl+F9 重新编译(无需重启项目,代码自动生效)
    • Eclipse:保存代码后自动编译,无需额外操作
方案三:检查 IDE 编译配置(避免 IDE 未自动编译)

如果你的 IDE 没有开启 “自动编译”,即使手动执行 compile 也可能无效:

  • IDEA:
    1. 打开 File > Settings > Build, Execution, Deployment > Compiler
    2. 勾选 Build project automatically
    3. Ctrl+Shift+Alt+/,选择 Registry,勾选 compiler.automake.allow.when.app.running
  • Eclipse:
    1. 打开 Window > Preferences > Java > Compiler > Building
    2. 确保 Build automatically 勾选

总结

  1. 临时解决:执行 mvn clean compile spring-boot:run 强制编译并运行最新代码。
  2. 长期优化:在 pom.xml 中添加 spring-boot-devtools 依赖,启用热部署,开发时修改代码无需重启项目。
  3. 基础保障:检查 IDE 的自动编译配置,确保代码修改后能被及时编译。

 

二、DeepSeek的回答

你遇到的问题很常见:明明修改了代码,但通过 mvn spring-boot:run 启动的应用却没有生效,运行的还是旧代码。这通常不是因为某个单一的错误,而是由几个典型原因造成的。下面我们来逐一排查和解决。

🧐 原因分析:为什么你的新代码没跑起来?

你的情况很可能属于以下几种之一,我们可以对照检查一下:

可能原因 简要说明 解决方案
未触发编译 Maven命令没有自动重新编译修改的代码。 运行mvn compilemvn clean install先编译。
模块依赖未更新 修改了非启动模块(如公共模块),但主模块仍引用旧的JAR包。 需要重新安装被修改的模块到本地仓库。
IDE缓存问题 IDE(如IDEA)的缓存导致文件没有被正确识别和编译。 清除IDE缓存并重启。
缺少热部署支持 希望代码修改后应用自动重启,但未配置DevTools或IDE设置不完整。 添加spring-boot-devtools依赖并正确配置IDE。

🛠️ 解决方案:一步步让新代码生效

下面我们针对上述原因,提供具体的解决步骤。

方案一:确保代码已编译(基础操作)

mvn spring-boot:run 命令在启动应用前会自动编译你的代码,但这个自动编译有时会失灵。

  • 第一步:手动编译。先在你的项目根目录下执行 mvn compile,手动编译项目。看看编译过程是否报错,如果编译失败,应用自然不会运行新代码。

  • 第二步:彻底清理并安装。如果手动编译后问题依旧,可以执行更彻底的 mvn clean install。这个命令会清理之前的编译结果,重新编译、运行测试,并将最终的包安装到本地Maven仓库。之后再次运行 mvn spring-boot:run,这通常能解决大部分“陈年旧疾”。

方案二:处理多模块项目(关键步骤) —— 【注意】最后的解决方案

如果你的项目由多个模块组成(例如一个common模块和一个web启动模块),那你很可能遇到了Maven的工作机制问题。

  • 根本原因:当你修改了非启动模块(如common)的代码后,主启动模块(web)在运行时仍然通过本地Maven仓库引用common模块的旧JAR包,而不是你刚刚修改的最新代码-4-7

  • 解决方法

    1. 修改common模块的代码后,必须进入common模块的目录,执行 mvn clean install,将它重新安装到本地仓库。

    2. 然后,再回到主启动模块,执行 mvn spring-boot:run。这样启动的才是包含所有最新修改的应用。

方案三:开启自动更新和热部署(开发提效)

如果你希望修改代码后无需手动停止再启动,而是让应用自动更新,可以配置热部署功能。

  1. 添加依赖:在你的pom.xml文件中引入spring-boot-devtools依赖。
     

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <scope>runtime</scope>
        <optional>true</optional>
    </dependency>
  2. 配置IDEA:这是最关键的一步。很多情况下,热部署不生效是因为IDEA的设置问题。
  • 开启自动编译:打开IDEA设置 (File -> Settings),找到 Build, Execution, Deployment -> Compiler,勾选 Build project automatically
  • 开启Registry:使用快捷键 Ctrl+Shift+Alt+/ (Windows/Linux) 或 Cmd+Shift+Alt+/ (Mac),选择 Registry
  • 关键设置:在Registry中找到并勾选 compiler.automake.allow.when.app.running 这个选项-3。这样,当应用运行时,IDEA才允许自动编译。

完成以上设置后,当你修改代码并保存时(IDEA会自动编译),spring-boot-devtools就会检测到变化并自动重启应用,让你立即看到修改效果。

下一步行动建议

  1. 立即检查:请先确认你的项目是单模块还是多模块。如果是多模块,方案二是你当前最需要的。

  2. 优先推荐:立即执行 mvn clean install 重新构建整个项目,然后再次运行 mvn spring-boot:run。这个简单操作往往能立竿见影。

  3. 长期提效:按照方案三的步骤配置好热部署。虽然初次配置稍显繁琐,但能为你后续的开发节省大量反复重启应用的时间。

如果你的项目是多模块的,并且经过上述步骤后,修改主启动模块的代码能生效,但修改公共模块后依然不行,可以随时告诉我,我们再一起看看是不是还有其他细节需要调整。