1. maven安装
1.1 安装JDK 8
- 最近更换了mac,新的mac操作系统为
macOS Monterey
,对应的具体版本为12.2.1
- 完成JDK 8的安装:并未参考任何博客,直接下载对应安装包,进行安装
- 自己在位配置任何Java环境变量的情况下,发现
java -version
、javac
、java
命令都能执行,就没做后续的配置 - 如果想要快速下载历史版本,可以参考作者之前的博客:win10安装jdk1.8(附国内下载镜像)
- 可以参考博客:带图形界面的JDK安装:Java从零开始(2)在 MacOS 上安装 Java,完成JDK的安装
- 其中,
/usr/libexec/java_home
可以用于获取Java的安装路径,起该井版本/usr/libexec/java_home -V
或/usr/libexec/java_home -V version
,可以获取详细的JDK信息 - 对于该命令的解读,可以参考博客:Mac下查看java的安装路径
1.2 maven的安装
-
参考博客:2020最新版 maven for MAC 安装及配置,完成maven的安装与配置
-
最终在终端输入
mvn -version
能成功显示maven的版本信息$ mvn -version Apache Maven 3.6.1 (d66c9c0b3152b2e69ee9bac180bb8fcc8e6af555; 2019-04-05T03:00:29+08:00) Maven home: /Users/11120066/apache-maven-3.6.1 Java version: 1.8.0_192, 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: "10.16", arch: "x86_64", family: "mac"
2. mvn命令执行报错
2.1 错误信息
-
通过执行
mvn clean install -DskipTests
编译、安装项目时,在compile阶段报错 -
报错的关键信息如下:
No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?
2.2 问题的解决
- 查阅了很多博客,后来也补上了JAVA_HOME,但是仍然没有解决问题
- 后来怀疑是
/usr/libexec/java_home
获取到的Java安装路径(/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home
)有问题,因为教程里面获取到的安装路径跟自己不一样 - 考虑到macOS版本不同,所以认为安装路径是OK的,只是因为路径有空格导致无法正确识别
- 因此,自己还使用
\
转义空格后,但仍然没有解决问题 - 最后参考博客:mac Big Sur系统 mvn打包报错:No compiler is provided in this environment. Perhaps you are running on a JRE,成功解决问题
自己的做法
-
首先,确认存在另一个安装路径
/Library/Java/JavaVirtualMachines/...
$ /usr/libexec/java_home -V Matching Java Virtual Machines (2): 1.8.192.12 (x86_64) "Oracle Corporation" - "Java" /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home 1.8.0_192 (x86_64) "Oracle Corporation" - "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_192.jdk/Contents/Home
-
然后,删除带空格的安装路径
-
最后,再次执行
mvn -version
时,显示的runtime就变化了
一些说明:
- 自己并未在
~/.bash_profile
中设置JAVA_HOME,系统也能成功获取到Java的环境变量。猜测:这是图形界面安装JDK,自带的隐形福利 - 根据自己的多年经验,在做删除前,请先确认是否有备份或者后退之路,不然不要轻易执行删除