對 java 命令進行故障排除
此示例涵蓋使用’java’命令時的常見錯誤。
沒有找到指令
如果你收到如下錯誤訊息:
java: command not found
在嘗試執行 java
命令時,這意味著 shell 的命令搜尋路徑上沒有 java
命令。原因可能是:
- 你根本沒有安裝 Java JRE 或 JDK,
- 你還沒有在 shell 初始化檔案中更新
PATH
環境變數(正確),或者 - 你還沒有獲取當前 shell 中的相關初始化檔案。
有關你需要執行的步驟,請參閱 “安裝 Java” 。
無法找到或載入主類
如果 java
命令無法找到/載入你指定的入口點類,則會輸出此錯誤訊息。一般而言,這可能有三個原因:
- 你已指定了不存在的入口點類。
- 該類存在,但你指定的不正確。
- 該類存在並且你已正確指定它,但 Java 無法找到它,因為類路徑不正確。
以下是診斷和解決問題的過程:
-
找出入口點類的全名。
- 如果你有類的原始碼,則全名由包名稱和簡單類名組成。
Main
類的例項在包“com.example.myapp”中宣告,然後其全名是“com.example.myapp.Main”。 - 如果你有一個已編譯的類檔案,你可以通過執行
javap
找到類名。 - 如果類檔案位於目錄中,則可以從目錄名稱推斷出完整的類名。
- 如果類檔案位於 JAR 或 ZIP 檔案中,則可以從 JAR 或 ZIP 檔案中的檔案路徑推斷出完整的類名。
- 如果你有類的原始碼,則全名由包名稱和簡單類名組成。
-
檢視
java
命令的錯誤訊息。該訊息應以java
嘗試使用的完整類名結束。- 檢查它是否與入口點類的完整類名完全匹配。
- 它不應該以“.java”或“.class”結尾。
- 它不應包含斜槓或 Java 識別符號 1 中 不合法的任何其他字元。
- 名稱的大小寫應與完整的類名完全匹配。
-
如果你使用正確的類名,請確保該類實際上在類路徑上:
- 計算出類名對映到的路徑名; 請參閱將類名對映到路徑名
- 弄清楚類路徑是什麼; 請參閱此示例: 指定類路徑的不同方法
- 檢視類路徑上的每個 JAR 和 ZIP 檔案,看它們是否包含具有所需路徑名的類。
- 檢視每個目錄以檢視路徑名是否解析為目錄中的檔案。
如果手動檢查類路徑沒有找到問題,可以新增 -Xdiag
和 -XshowSettings
選項。前者列出了所有載入的類,後者列出了包含 JVM 有效類路徑的設定。
最後,這個問題有一些不明原因:
- 具有
Main-Class
屬性的可執行 JAR 檔案,該屬性指定不存在的類。 - 具有錯誤
Class-Path
屬性的可執行 JAR 檔案。 - 如果你在類名之前搞亂了 2 個 選項,
java
命令可能會嘗試將其中一個解釋為類名。 - 如果有人忽略了 Java 樣式規則並使用了僅在字母大小寫方面不同的包或類識別符號,並且你在平臺上執行將檔名中的字母大小寫視為不重要。
- 程式碼或命令列中類名中的同形字元問題。
“在類<name>中找不到主要方法”
當 java
命令能夠找到並載入你指定的類但是無法找到入口點方法時,會發生此問題。
有三種可能的解釋:
- 如果你嘗試執行可執行 JAR 檔案,則 JAR 的清單具有不正確的“Main-Class”屬性,該屬性指定的類不是有效的入口點類。
- 你告訴
java
命令一個不是入口點類的類。 - 入口點類不正確; 有關詳細資訊,請參閱入口點類 。
其他資源
1 - 從 Java 8 及更高版本開始,java
命令將有助於將檔名分隔符(“/”或“”)對映到句點(“。”)。但是,手冊頁中未記錄此行為。
2 - 一個非常模糊的情況是,如果你從格式化文件中複製並貼上命令,其中文字編輯器使用長連字元而不是常規連字元。