2013-05-15 43 views
1

這就是我所得到的。將HelloWorld編程編譯爲jar時的NoClassDefFoundError

我有這一切都包含在我的 '米亞瓦' 文件夾

MyJava/src/a/HelloWorld.java 
MyJava/src/b/Inner.java 
MyJava/bin/ 
MyJava/manifest.txt 

HelloWorld.java:

public class HelloWorld { 

    public static void main(String[] args) { 

     System.out.println("Hello, World"); 

     Inner myInner = new Inner(); 
     myInner.myInner(); 
    } 
} 

Inner.java:

public class Inner { 

    public void myInner() { 
     System.out.println("Inner Method"); 
    } 
} 

清單。 txt:

Main-Class: HelloWorld

首先,我編譯.javas到的.class:

javac -d bin src/a/HelloWorld.java src/b/Inner.java

現在我把這些成一個.jar文件 jar cvfm myTwo.jar manifest.txt bin/*.class

現在我嘗試運行jar: java -jar myTwo.jar

我得到:

Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorld 
... 
Could not find the main class: HelloWorld. Program will exit. 

我知道這是一個非常簡單的問題,我錯過了什麼?

+0

這不是一部分包。 – dwjohnston

+0

爲什麼這兩個類在不同的目錄中? –

+0

呃......我正在努力研究如何編譯某些東西。雖然類似的東西使用包。 – dwjohnston

回答

2

如果您檢查.JAR中的文件,您會注意到您的編譯類位於bin目錄內(因此,因爲您的清單引用了頂層的類,所以無法找到)。
更改jar...命令是這樣的:

jar cvfm myTwo.jar manifest.txt -C bin . 

參見Java教程的"Creating a JAR File" section

0

解決的辦法之一是以下行添加到manifest.txt

Class-Path: bin/ 

然後你可以用「您」命令的jar創建:

jar cvfm myTwo.jar manifest.txt bin/*.class