为何`mvn spring-boot:run`仅在IntelliJ GUI执行test/deploy后可用?
问题原因分析
1. 终端与IntelliJ使用的JDK版本不一致
你虽然确认了$JAVA_HOME指向Java 21,但终端中Maven实际调用的JDK可能是更低版本:
- 若刚修改过
~/.bashrc或~/.zshrc里的JAVA_HOME配置,但没重启终端或执行source ~/.bashrc(对应你的shell),当前终端会话的环境变量并未生效,Maven会调用系统默认的低版本JDK。 - Maven全局配置文件(
conf/settings.xml)或项目pom.xml中,可能通过maven.compiler.source/maven.compiler.target参数指定了低于21的JDK版本,但IntelliJ会优先使用自身配置的Project SDK(Java 21),不受这些配置影响。
2. IntelliJ执行任务后跳过了编译环节
通过IntelliJ运行test和deploy时,它已经完成了编译并生成了target目录下的有效class文件。此时在终端执行mvn spring-boot:run,Maven会检测到class文件已存在且未过期,直接跳过编译步骤,自然不会触发版本不兼容的错误。
但在终端执行test/deploy时,因终端JDK版本不足导致编译失败,target目录没有可用的class文件,后续spring-boot:run必须重新编译,因此再次抛出版本不支持的错误。
3. Maven的系统绑定JDK问题(次要可能性)
如果你的Maven是通过Linux系统包管理器(如apt、yum)安装的,可能存在默认绑定低版本JDK的情况,即使$JAVA_HOME设为21,Maven实际运行时仍会调用绑定的低版本JDK。
内容的提问来源于stack exchange,提问作者Olivia22
相关产品推荐
相关产品推荐

