繁体   English   中英

Mac os 大苏尔 | 此环境中不提供编译器。 也许您在 JRE 而不是 JDK 上运行?

[英]Mac os Big Sur | No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?

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

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

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

所以,我想知道 JAVA_HOME 的位置是否不正确,如果是,我该如何解决? 抱歉,如果问一些明显的问题,但我对此并不陌生。

我将衷心感谢您的帮助。

在此处输入图像描述

我遇到了和你一样的问题。
这个解决方案( 构建失败运行“mvn clean install”。我刚刚升级了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 插件/JavaAppletPlugin.plugin/Contents/Home

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

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

第 2 步:更新 mvn shell

在 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,所以我将 shell 更新为

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 内部的子文件夹。 没关系。

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 将在您下次执行操作系统更新时重置任何更改。

我遇到了同样的问题,无法使用提供的答案修复它,maven 一直使用默认的 jre,我总是收到“没有编译器错误..”。 我设法通过设置 JAVA_HOME 环境来解决它,所以就我而言,我使用了以下命令:

导出 JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_331.jdk/Contents/Home

在此命令之后,命令 mvn -v 现在输出:

Maven home: /opt/homebrew/Cellar/maven/3.8.5/libexec Java version: 1.8.0_331, vendor: Oracle Corporation, runtime: /Library/Java/JavaVirtualMachines/jdk1.8.0_331.jdk/Contents/Home/jre

虽然它显示 /jre,但失败的命令“mvn clean package -D skipTests”现在可以正常执行。

所以希望它可以帮助某人。

运行命令列出可用的 java 安装:

$ /usr/libexec/java_home -V

配套Java虚拟机(二):

1.8.251.08 (x86_64) "Oracle Corporation" - "Java" /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home
1.8.0_251 (x86_64)“甲骨文公司”-“Java SE 8”/Library/Java/JavaVirtualMachines/jdk1.8.0_251.jdk/Contents/Home

检查以下命令的默认返回值,在我的例子中是 jre 路径:

$/usr/libexec/java_home

/Library/Internet 插件/JavaAppletPlugin.plugin/Contents/Home

运行命令获取JDK路径:

$ /usr/libexec/java_home -v1.8.0

/Library/Java/JavaVirtualMachines/jdk1.8.0_251.jdk/Contents/Home

.bash_profile文件中添加以下行:

导出 JAVA_HOME=$(/usr/libexec/java_home -v1.8.0)

Go 到您的终端并使用您自己的 JAVA_HOME 版本编辑 zshrc 文件

对于第 3 步,输入您的 java 版本

类型:

  1. vim ~/.zshrc
  2. 按 i 插入并添加到 JAVA_HOME 的路径
  3. 导出 JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_261.jdk/Contents/Home
  4. 按 control + c 退出插入模式 vim
  5. 输入:wq 将保存文档并退出 vim 编辑器
  6. 源〜/ .zshrc
  7. mvn-版本

在所有这些步骤之后键入 mvn -version 之后,您将能够看到您的 JAVA 版本和供应商从默认的“/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home”更新到您提到的 java 版本。

感谢您的建议,但您对“mvn shell”的意思有点迷茫。 在 /usr/local/Cellar/mvnvm/1.0.15/libexec/bin/mvn 找到了 mvn 脚本,但脚本中没有提到“java”或“Apple”。 你能为我指出正确的方向吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM