mac maven编译 No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK 问题修复
这个报错仔细分析实际上就在说: 我找到了
JRE
但是没有找到javac
命令
说人话不是当前环境只有JRE的执行路径被识别.没有识别到JDK的目录. 导致我们只能找到java
命令.
无法找到javac
命令.(注: 这个命令是用于java文件编译用的. 所以Maven在打包的时候clean pcakge此类的命令最后调用的也是javac
,如果找不到javac
, 那么maven
就会报上面的提示告诉你: 是不是没有正确设置或者安装JDK, 你的当前环境极有可能是一个JRE)
刚开始我的电脑我也不确定是否已经安装过JDK.
不管怎样,先去下载一个JDK8 的版本进行安装. 这里使用华为提供的镜像地址进行下载.
JDK8下载地址: https://mirrors.huaweicloud.com/java/jdk/8u181-b13/
使用命令:/usr/libexec/java_home -V
可以列举出当前的机器上安装的JDK/JRE有哪些:
/usr/libexec/java_home -V
Matching Java Virtual Machines (2):
1.8.181.13 (x86_64) "Oracle Corporation" - "Java" /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home
1.8.0_181 (x86_64) "Oracle Corporation" - "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home
/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home
注: 这里的命令识别出来有两个JDK或者JRE . 第一个是(JRE)
1.8.181.13 (x86_64) "Oracle Corporation" - "Java" /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home
另外一个是(JDK):1.8.0_181 (x86_64) "Oracle Corporation" - "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home
然后默认的是:/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home
也就是选中的其中的第一个.
我们看一下这两个目录的情况.
1.8.181.13 (x86_64) "Oracle Corporation" - "Java" /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home 这个是JRE,里面只有一个 java 命令.并没有`javac
/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home ,这个是JDK的目录.
正确设置JAVA_HOME
方法1 直接使用上面的地址进行环境变量设置.比如这样
注: 所在文件为
.bash_profile
其中的IDEA_JDK
为非必须. 可以去除
JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home
IDEA_JDK=/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk
export JAVA_HOME
export IDEA_JDK
export PATH=$PATH:$JAVA_HOME/bin:$IDEA_JDK
方法2 使用/usr/libexec/java_home -v xxx_version
这里的具体命令和版本号为:
/usr/libexec/java_home -v 1.8.0_181
/usr/libexec/java_home -v 1.8.0_181
/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home
这样可以在.bash_profile
中设置如下配置:
# 设置 JDK 7
export JAVA_7_HOME=`/usr/libexec/java_home -v 1.7`
# 设置 JDK 8
export JAVA_8_HOME=`/usr/libexec/java_home -v 1.8.0_181`
#默认JDK 8
export JAVA_HOME=$JAVA_8_HOME
#alias命令动态切换JDK版本
alias jdk6="export JAVA_HOME=$JAVA_6_HOME"
alias jdk7="export JAVA_HOME=$JAVA_7_HOME"
alias jdk8="export JAVA_HOME=$JAVA_8_HOME"
这样就默认动态的取到一个想要的jdk版本. 如果要临时切换.就在上面的命令中执行一下.比如执行一下:jdk7
,前提是你安装了这个jdk.
后记
原因
这个问题折腾了这么久,实际上我的电脑应该是安装了jdk
的.至于为什么出现这个问题. 是因为我的JAVA_HOME的设置里面的版本没有填写对 (方案一 , 原因是我的电脑的配置是从旧电脑拷贝过来的.但是旧电脑的JDK是老一点的版本.新mac是安装的新一点的版本jdk). 这样没有生效.导致没有找到我想要的jdk.