mac maven编译 No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK 问题修复

  |   0 评论   |   2,368 浏览

这个报错仔细分析实际上就在说: 我找到了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
JREBIN.jpeg

/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home ,这个是JDK的目录.

JDKBIN.jpeg

正确设置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.

JDK与JRE安装目录.

参考

  1. csdn参考一 不是最优方案
  2. 查看已经安装的jdk版本
  3. Installed Directory Structure of JDK and JRE
  4. Installation of the JDK and the JRE on macOS
  5. https://stackoverflow.com/questions/19039752/removing-java-8-jdk-from-mac
  6. 2020macOS Big Sur配置Java开发环境之jdk安装
  7. 基础坑!新版Mac Big Sur JDK环境配置

评论

发表评论


取消