2011-06-23 220 views
2

我得到:Could not find the main class: org.dav.kin.Tester. Program will exit.,當我試圖通過java -jar tester.jar運行我的jar文件java -classpath tester.jar org.dav.kin.Tester有誰知道什麼是錯的,如何解決呢?以下是更多細節。謝謝。罐找不到主類

清單文件:

Manifest-Version: 1.0 
Created-By: DKin 
Class-Path: . 
Main-Class: org.dav.kin.Tester 

罐子TF tester.jar

org/ 
org/dav/ 
org/dav/kin/ 
org/dav/kin/Tester.class 
org/dav/kin/TesterCellRenderer.class 
... 
... 
META-INF/ 
META-INF/MANIFEST.MF 

更新:如果我指定的系統類路徑,其中包含

Jar文件運行groovy-all-{version}.jar,李ke so:java -classpath tester.jar;"%CLASSPATH%" org.dav.kin.Tester任何人都知道爲什麼我必須顯式重新聲明classpath(或者更確切地說,是groovy jar)?

+1

顯示輸出jar tf tester.jar' –

+0

確保最後一行是「Main-Class:org.dav.kin.Tester \ r \ n」,只是換行符不能可靠工作。 –

回答

0

JAR文件缺少一個文件,這個名字

/org/dav/kin/Tester.class 

,或者你有你的MANIFEST.MF文件的特殊字符

MANIFEST.MF文件有一個特定的語法。最好使用其他工具來生成它們;但是我遇到的一些細節增加了手寫文件的成功,包括:

  1. 請務必確保行少於72個字符長。
  2. 始終使用\ r \ n(windows換行符),即使在非Windows系統上也是如此。
  3. 確認所有空格字符都是空格。
  4. 確認沒有不可打印的字符(htab等)。
  5. 有時文件末尾的空行會有幫助。
0

是Tester.class的包聲明org.dav.kin?

+0

是的,'Tester'源文件包含'org.dav.kin'包聲明。 – dakin

0

您已經表明您正在使用Groovy。 Groovy不會編譯到Java類文件,但它仍然需要groovy運行時庫。您需要確保groovy在類路徑以及類中。試試這個:

java -classpath tester.jar;groovy-all-1.8.0.jar org.dav.kin.Tester 
+1

我的系統變量「CLASSPATH」確實包含「groovy-all-1.8.0.jar」。但是,只有在指定系統類路徑時,jar纔會運行,其中包含groovy jar,如下所示:'java -classpath tester.jar;'%CLASSPATH%「org.dav.kin.Tester' – dakin

0

爲了以防萬一。我只是解決完全相同的問題。 而是在MANIFEST.MF

之一

Class-Path: . 

應該枚舉(與空間),它們需要在運行時JAR,所以它應該是這樣的:從`

Class-Path: groovy-all-2.4.5.jar relative/my-dependent-project-artifact.jar