【问题标题】:Mac os Big Sur | No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?Mac os 大苏尔 |此环境中不提供编译器。也许您在 JRE 而不是 JDK 上运行?
【发布时间】:2021-04-30 10:01:08
【问题描述】:

我在屏幕截图上遇到了这个错误,我也看到了其他关于它的帖子,但是,提供的修复主要是针对 Windows 的,所以无论我尝试什么都没有解决我的 Mac 上的问题。

目前,当我运行 /usr/libexec/java_home 时,它​​指向我这里: /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home

因此,当运行 maven 项目时,它会通过如下消息: 此环境中不提供编译器。也许您在 JRE 而不是 JDK 上运行?

所以,我想知道 JAVA_HOME 的位置是否不正确,如果是,我该如何解决? 对不起,如果问一些明显的问题,但我是新手。

非常感谢您的帮助。

enter image description here

【问题讨论】:

标签: java maven


【解决方案1】:

我遇到了和你一样的问题。
这个解决方案(Build failure run "mvn clean install". I just upgraded Big Sur)是删除无用的jre。
我的是给 mvn shell 一个正确的 java_home。

解决方案 - 编辑 mvn bash

第 1 步:检查如何通过 /usr/libexec/java_home 过滤您的目标 java

当我运行命令/usr/libexec/java_home -V

我可以看到 2 个虚拟机

MacBook-Pro:bin charles$ /usr/libexec/java_home -V
Matching Java Virtual Machines (2):
    1.8.251.08 (x86_64) "Oracle Corporation" - "Java" /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home
    1.8.0_251 (x86_64) "Oracle Corporation" - "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_251.jdk/Contents/Home
/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home

我的默认返回值/usr/libexec/java_home 是我的 jre 路径,例如
/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home

但我可以更改返回 jdk 路径
/Library/Java/JavaVirtualMachines/jdk1.8.0_251.jdk/Contents/Home

如果我运行命令
/usr/libexec/java_home -v1.8.0

第 2 步:更新 mvn 外壳

在 mvn shell 中查找以下行


if [ -z "$JAVA_HOME" ] && [ -x "/usr/libexec/java_home" ]; then
    #
    # Apple JDKs
    #
    export JAVA_HOME=`/usr/libexec/java_home`
fi

因为我可以使用usr/libexec/java_home -v1.8.0 来确保系统使用jdk, 我将我的外壳更新为

if [ -z "$JAVA_HOME" ] && [ -x "/usr/libexec/java_home" ]; then
    #
    # Apple JDKs
    #
    export JAVA_HOME=`/usr/libexec/java_home -v1.8.0`
fi

然后,它起作用了。

如何检查差异

mvn -version

在我更新我的 mvn 之前,我会看到

MacBook-Pro:~ charles$ mvn -version
Apache Maven ........
Maven home: ........
Java version: 1.8.0_251, vendor: Oracle Corporation
Java home: /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home
Default locale: zh_TW, platform encoding: UTF-8
OS name: "mac os x", version: "10.16", arch: "x86_64", family: "mac"

更新我的 mvn 后,我可以看到结果

MacBook-Pro:~ charles$ mvn -version
Apache Maven ........
Maven home: .......
Java version: 1.8.0_251, vendor: Oracle Corporation
Java home: /Library/Java/JavaVirtualMachines/jdk1.8.0_251.jdk/Contents/Home/jre
Default locale: zh_TW, platform encoding: UTF-8
OS name: "mac os x", version: "10.16", arch: "x86_64", family: "mac"

虽然java home显示为jre路径,但jre是jdk内部的子文件夹。没关系。

【讨论】:

  • 这个答案在 macOS 上适用于我。
  • 如何更新你的 maven shell?
【解决方案2】:

Mac 自带的默认 JRE 是 /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home

% /usr/libexec/java_home
/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home

我已经使用 dmg 文件安装了 JDK。即使将 JAVA_HOME 从 bashrc (/Library/Java/JavaVirtualMachines/jdk1.8.0_202.jdk/Contents/Home) 传递到新路径后,它也没有被占用。

列出可用的 java 安装

% /usr/libexec/java_home -V
Matching Java Virtual Machines (2):
    1.8.311.11 (x86_64) "Oracle Corporation" - "Java" /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home
    1.8.0_202 (x86_64) "Oracle Corporation" - "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_202.jdk/Contents/Home

为了指向您的 JDK,只需执行以下操作。

% cd /Library/Internet\ Plug-Ins
% ls
JavaAppletPlugin.plugin
$ sudo mv JavaAppletPlugin.plugin JavaAppletPlugin.plugin-backup 

之后,如果你运行命令

% /usr/libexec/java_home
/Library/Java/JavaVirtualMachines/jdk1.8.0_202.jdk/Contents/Home

不要试图通过从 /usr/bin 中删除 Java 工具来卸载 Java。此目录是系统软件的一部分,Apple 将在您下次执行操作系统更新时重置任何更改。

【讨论】:

    猜你喜欢
    • 2013-11-08
    • 2019-10-23
    • 2016-04-29
    • 2018-06-12
    • 2018-02-25
    • 1970-01-01
    • 2017-07-15
    • 2018-11-12
    • 1970-01-01
    相关资源
    最近更新 更多