首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 套件(package)在命令列執行找不到類別?NoClassDefFoundError 解決全攻略

     編輯:Java 相關知識

在 IDE(如 Eclipse)中開發測試皆正常,但改用記事本撰寫、在 DOS 命令列以 javac 編譯成功、卻以 java 執行時噴出 Exception in thread "main" java.lang.NoClassDefFoundError,這是初學者最常遇到的套件路徑問題。

錯誤重現

package com.deco;
import java.util.*;
public class Test {
    public static void main(String args[]) {
        System.out.println("Hello package!!!");
    }
}

錯誤原因分析

  1. 環境變數正確:IDE 能跑表示 JDK/JRE 路徑無誤。
  2. 無套件時正常:移除 package com.deco; 後可編譯執行,確定是套件名稱導致類別載入失敗。

核心觀念:類別全名與目錄結構必須對應

類別 com.deco.Test 編譯後需產生目錄結構 com/deco/Test.class。執行時 當前工作目錄必須是套件根目錄的上一層,並以完整類別名啟動。

正確操作步驟

1. 編譯:產生對應目錄結構

javac -d . Test.java

-d . 代表將編譯輸出至當前目錄下,自動建立 com/deco/ 資料夾並放入 Test.class。

2. 執行:在套件根目錄上層下指令

java com.deco.Test

錯誤示範:cd com/deco 後執行 java Test 或 java com.deco.Test 皆會失敗,因為 JVM 會從當前目錄尋找 com/deco/Test.class,但你已在 deco 資料夾內,找不到上層 com 目錄。

圖解目錄結構

project/          ← 執行 java 指令的位置(CLASSPATH 包含 .)
├── com/
│   └── deco/
│       └── Test.class
└── Test.java

關鍵口訣

「編譯用 -d 產生資料夾,執行站在套件根目錄的父目錄,打全名。」

補充:CLASSPATH 設定

若類別檔不在當前目錄下,可用 -cp 或 -classpath 指定根目錄:

java -cp /path/to/project com.deco.Test
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved