2011-02-03 203 views
1

我正在使用Eclipse,並且我有一個非常簡單的項目,我將爲您保存代碼。它執行得很好,運行得很好。它有兩個.java文件,實際上,項目樹是這樣的:創建.JAR文件失敗

**mewLog** 
- src/ (dir) 
    mewlog/ (package) 
    - MLGlobal.java 
    - MLMain.java (surprise, this one contains main and some initialization methods)  
    mlGUI/ (package) 
    - this one is empty (empty package!) 

所以,我去文件 - >導出。我按照慣例遵循這些步驟,它使得我的.JAR文件沒有任何警告或問題。好!

到目前爲止好一會說,所以我衝上去給我的終端,導航到我出口我的罐子中的文件夾,如下執行它:

java -jar mewLog_macosx-x86.jar 

BAM!這裏出錯了,終端給了我以下輸出:

Exception in thread "main" java.lang.NoClassDefFoundError: MLMain 
Caused by: java.lang.ClassNotFoundException: MLMain 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:307) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:248) 

好的。在你說「哦,你必須添加班級路徑」之前。我試過了,它不起作用,無論我做什麼,都給了我「BLAH」。

我正在使用Mac OS X Snow Leopard。

jar -tf mewLog_MacOSX-x86.jar

jar -tf mewLog_MacOSX-x86.jar 
META-INF/MANIFEST.MF 
.project 
.classpath 
mewlog/MLGlobal.class 
mewlog/MLMain.class 

回答

2

輸出也

java -cp mewLog_macosx-x86.jar mewlog.MLMain

工作?

,如果這樣的話在你的Jar清單文件指向錯誤的Main-Class(不考慮包進去)

+0

那是不行的,不幸的是在安裝Fatjar的Eclipse插件。 – 2011-02-03 21:32:40

+0

「不工作」是什麼樣子?這是如何不問問題的好例子。閱讀此:http://www.catb.org/~esr/faqs/smart-questions.html – duffymo 2011-02-03 21:46:28

+0

@Jesse:那是因爲它是錯誤的。當在命令行上指定主類時,它應該是-cp而不是-jar – 2011-02-03 21:48:15

1

首先,.java文件走不進JAR文件 - 的.class文件做。 JVM不能執行.java文件。你必須先編譯它們。

其次,如果您打算將其設置爲可執行JAR,則必須添加一個清單,指定具有主要方法的類。

最好讓Eclipse離開,並且第一次手動完成。使用/ bin目錄中的jar.exe工具。

Here's可能(或不可以)幫助你的鏈接。

0

愚蠢的問題,但你選擇「文件 - >導出 - > Java-> JAR文件」或「文件 - >導出 - > Java->可運行JAR文件」?除非Manifest.MF文件告訴虛擬機主類是什麼,否則默認情況下jar是不可運行的。

0

您必須將編譯後的類放入jar中,並在manifest文件中指定它是主類。

在終端試試這個:

$cat Hola.java 
package hola; 

class Hola { 
     public static void main(String ... args) { 
       System.out.println("Hola mundo!"); 
     } 
} 

$cat m.mf 
Main-Class: hola.Hola 

$javac -d . Hola.java 


$jar -cmf m.mf hola.jar hola 

$java -jar hola.jar 
Hola mundo! 

然後比較你煲的內容,看看有什麼不同的(明顯不同的類名稱旁)

這裏的關鍵是要確定是否結構你的jar文件是否正確(提供輸出jar -tf mewLog_macosx-x86.jar也會有所幫助)

我希望這有助於。

1

你的問題是主類需要用它的完全限定名列出來,即包含這個包。 Java正在尋找類MLMain,這意味着它直接在類路徑根中查找。但是你的班級是mewlog.MLMain,在mewlog包內。