mac maven编译出现问题

背景

进行maven install 命令,报错:

复制代码
[ERROR] COMPILATION ERROR : 
[INFO] -------------------------------------------------------------
[ERROR] No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?
[INFO] 1 error
[INFO] -------------------------------------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  0.310 s
[INFO] Finished at: 2024-11-26T11:22:34+08:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project channelapi-service: Compilation failure
[ERROR] No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?
[ERROR] 
[ERROR] -> [Help 1]
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException

分析

java安装正常

复制代码
>java -version

java version "1.8.0_381"
Java(TM) SE Runtime Environment (build 1.8.0_381-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.381-b09, mixed mode)


>/usr/libexec/java_home -V


Matching Java Virtual Machines (3):
    1.8.381.09 (arm64) "Oracle Corporation" - "Java" /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home
    1.8.0_381 (arm64) "Oracle Corporation" - "Java SE 8" /Library/Java/JavaVirtualMachines/jdk-1.8.jdk/Contents/Home
    1.8.0_202 (x86_64) "Oracle Corporation" - "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_202.jdk/Contents/Home
/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home

mvn -v 查看 runtime 环境

复制代码
mvn -v
Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)
Maven home: /Users/manka/software/apache-maven-3.6.3
Java version: 1.8.0_381, vendor: Oracle Corporation, runtime: /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home
Default locale: zh_CN, platform encoding: UTF-8
OS name: "mac os x", version: "14.6.1", arch: "aarch64", family: "mac"

解决

删除掉 JavaAppletPlugin.plugin 这个插件即可。

进入 /Library/Internet Plug-Ins/ 目录,删除 /Library/Internet Plug-Ins/JavaAppletPlugin.plugin

复制代码
> rm -rf JavaAppletPlugin.plugin

重新执行 mvn -v runtime 正确

复制代码
 mvn -v
Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)
Maven home: /Users/manka/software/apache-maven-3.6.3
Java version: 1.8.0_381, vendor: Oracle Corporation, runtime: /Library/Java/JavaVirtualMachines/jdk-1.8.jdk/Contents/Home/jre
Default locale: zh_CN, platform encoding: UTF-8
OS name: "mac os x", version: "14.6.1", arch: "aarch64", family: "mac"

补充知识

MAC OS X环境的所有配置以及加载顺序如下:

复制代码
# 系统级别
/etc/profile
/etc/paths 
 
# 用户级别
~/.bash_profile 
~/.bash_login 
~/.profile 
 
~/.bashrc(或者~/.zshrc)

前两个环境配置在系统启动时候就会加载,针对所有用户生效,后面四个属于具体用户级别的配置。

Maven会按照以下顺序来确定使用哪个JDK:

  1. Maven配置 :Maven允许你通过maven-compiler-plugin插件指定使用的JDK版本。如果你在项目的pom.xml文件中配置了这个插件,并指定了JDK版本,Maven会尝试使用这个版本。

  2. 环境变量 :如果Maven配置中没有指定JDK版本,它会查找环境变量JAVA_HOME。如果JAVA_HOME被设置,Maven会使用这个环境变量指向的JDK版本。

  3. 系统路径 :如果JAVA_HOME没有被设置,Maven会退回到系统路径(PATH环境变量)来查找javajavac命令。系统路径中列出的第一个java命令将被使用。

  4. JDK安装 :如果系统上安装了多个版本的JDK,并且PATH环境变量中包含了多个JDK的bin目录,那么系统会根据PATH中目录的顺序来决定使用哪个版本的java命令。

  5. 系统默认JDK:如果以上都没有指定,Maven将使用系统默认的JDK版本,这通常是操作系统安装时附带的JDK版本。

相关推荐
float_com8 分钟前
【java基础语法】------ 数组
java
Adellle12 分钟前
2.单例模式
java·开发语言·单例模式
零雲22 分钟前
java面试:有了解过RocketMq架构么?详细讲解一下
java·面试·java-rocketmq
Deamon Tree33 分钟前
HBase 核心架构和增删改查
java·hbase
卡卡酷卡BUG1 小时前
Java 后端面试干货:四大核心模块高频考点深度解析
java·开发语言·面试
Yolo566Q1 小时前
OpenLCA生命周期评估模型构建与分析
java·开发语言·人工智能
lang201509281 小时前
Spring Boot日志配置完全指南
java·spring boot·单元测试
在坚持一下我可没意见1 小时前
HTTP 协议基本格式与 Fiddler 抓包工具实战指南
java·开发语言·网络协议·tcp/ip·http·java-ee·fiddler
蓝-萧2 小时前
Plugin ‘mysql_native_password‘ is not loaded`
java·后端
故事不长丨2 小时前
【Java SpringBoot+Vue 实现视频文件上传与存储】
java·javascript·spring boot·vscode·后端·vue·intellij-idea