簡體   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