记一个maven编译打包低级错误"Fatal error compiling: 无效的目标发行版: 11"的解决

昨天遇到一个java8迁移到java11的项目编译问题,错误如下:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project xxxxx: Fatal error compiling: 无效的目标发行版: 11 -> [Help 1]

初以为是spring或maven版本低,升级以后仍然报错:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.10.1:compile (default-compile) on project xxxxx: Fatal error compiling: 无效的目标发行版: 11 -> [Help 1]

只好求助网络搜索,大多建议pom.xml增加:


<properties>
  <java.version>11</java.version>
  <maven.compiler.source>11</maven.compiler.source> 
  <maven.compiler.target>11</maven.compiler.target>
</properties>

也有建议修改maven的setting.xml文件,向文件中添加以下内容

复制代码
<profile>
    <id>jdk-11</id>
    <activation>
        <activeByDefault>true</activeByDefault>
        <jdk>11</jdk>
    </activation>
    <properties>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
        <maven.compiler.compilerVersion>11</maven.compiler.compilerVersion>
    </properties>
</profile>
复制代码

逐一尝试后并未解决前述错误,于是重新检查一遍当前java版本:

C:\Users\cocopi>java -version
java version "11.0.18" 2023-01-17 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.18+9-LTS-195)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.18+9-LTS-195, mixed mode)

检查maven版本:

C:\Users\cocopi>mvn -version
Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)
Maven home: D:\apache-maven-3.6.3\bin\..
Java version: 1.8.0_231, ... , runtime: C:\Program Files\Java\jdk1.8.0_231\jre
Default locale: zh_CN, platform encoding: GBK
OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"

至此发现错误原因,原来执行java -version默认使用系统环境变量JAVA_HOME,而maven优先使用了windows的用户变量JAVA_HOME(这里之前忘记修改,仍然指向java8路径),修改用户变量JAVA_HOME指向java11或删除该用户变量JAVA_HOME(如无它用)后即可。

这是个低级错误,网上未见提及,可能会帮到个别与我类似的朋友~

第一次在中国最伟大的开源博客上写笔记,如有不妥请多指教,祝一切顺利!

 

posted @   cocopi  阅读(8687)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示