2009-07-02 61 views
0

我使用IntelliJ構建了一個jar,正確設置了主類。NoClassDef運行罐子時發現

當我從命令行(Windows)運行「java -jar foo.jar」時,出現聲稱主文件丟失的異常。主類看起來類似:

package mypackage; 

public class LockUtil { 
    public static void main(String[] args) { 
    ... 

,我發現了以下異常:

Exception in thread "main" java.lang.NoClassDefFoundError: mypackage/LockUtil 
Caused by: java.lang.ClassNotFoundException: mypackage.LockUtil 
     at java.net.URLClassLoader$1.run(Unknown Source) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at java.net.URLClassLoader.findClass(Unknown Source) 
     at java.lang.ClassLoader.loadClass(Unknown Source) 
     at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) 
     at java.lang.ClassLoader.loadClass(Unknown Source) 
     at java.lang.ClassLoader.loadClassInternal(Unknown Source) 
Could not find the main class: mypackage.LockUtil. Program will exit. 

清單文件包含:

Manifest-Version: 1.0 
Created-By: IntelliJ IDEA 
Main-Class: mypackage.LockUtil 

而且罐子包含適當的目錄結構.class文件。

回答

1

您正在嘗試執行mypackage.LockUtil,但您應該使用mypackage.locking.LockUtil(請注意在課程開始處的package聲明)。

另一種可能性是您已將課程搬遷並忘記更新package聲明。

+0

對不起,這是一個錯誤張貼 - 實際包名是正確的,但...(我更新了問題) – ripper234 2009-07-02 15:11:55

0

看來,你的包的名稱mypackage.locking不僅mypackage的

0

看來,你的清單你的主類的定義是在mypackage的指向/ LockUtil而不是mypackage中/鎖定/ LockUtil。

-Rick

2

如果你這樣做java -tf foo.jar,你看到這樣的事情?

META-INF/ 
META-INF/MANIFEST.MF 
mypackage/ 
mypackage/LockUtil.class 

難道還有另外一個目錄級別在那裏的某個地方?

你可以確保Java知道主文件有通過構建jar文件像這樣的東西:

jar cfe foo.jar mypackage.LockUtil mypackage/LockUtil.class 
1

確實LockUtil對另一類是無法解析的依賴,從而不允許LockUtil加載?