2010年1月31日 星期日

java.lang.NoClassDefFoundError 可能的原因

執行 Java 遇到這類問題表示 classpath 沒設好, 可能的幾個問題:

  • 沒有將 jar 檔加入 classpath, 記得用 -cp (或 -classpath) 指定位置, 預設為 -cp .
  • 若指定了 -cp, 記得要加 ".", 不然變成找不到原本目錄下的 class 
  •  不同作業系統 -cp 裡用的分隔字元不同, 有些用 ";", 有些用 ":"
  • -cp 記得加在執行 class name 前面
假設目錄配置如下
bin/: 放編好的執行檔 (*.class)
src/: 原始碼 (*.java)
lib/: 放 jar 檔, 如 junit.jar

一個範例:
cd bin  
java -cp .;../lib/junit.jar AllTests
以下是可能的錯誤範例
java -cp ../lib/junit.jar AllTests
java -cp .:../lib/junit.jar AllTests  # Windows 下用 ;
java AllTests -cp .;../lib/junit.jar 


不得不說 Java 的 -cp 實在是很難用啊。

沒有留言:

張貼留言

在 Fedora 下裝 id-utils

Fedora 似乎因為執行檔撞名,而沒有提供 id-utils 的套件 ,但這是使用 gj 的必要套件,只好自己編。從官網抓好 tarball ,解開來編譯 (./configure && make)就是了。 但編譯後會遇到錯誤: ./stdio.h:10...