编译HelloWorld编程到jar时的NoClassDefFoundError

时间:2013-05-15 07:26:47

标签: java jar compilation noclassdeffounderror manifest.mf

这就是我所拥有的。

我的'MyJava'文件夹中包含了所有内容。

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");
    }
}

Manifest.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.

我知道这是一个非常简单的问题,我错过了什么?

2 个答案:

答案 0 :(得分:2)

如果检查.JAR中的文件,您会注意到编译的类在bin目录中(因此无法找到,因为您的清单引用了顶级的类)。
像这样更改jar...命令:

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

另请参阅Java教程的 "Creating a JAR File" section

答案 1 :(得分:0)

其中一个解决方案是将以下行添加到manifest.txt

Class-Path: bin/

然后你可以使用'your'命令创建jar:

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