首页 文章

编译HelloWorld编程到jar时的NoClassDefFoundError

提问于
浏览
1

这就是我所拥有的 .

我有我的'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

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

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

    另请参阅Java Tutorial的 "Creating a JAR File" section .

  • 2

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

    Class-Path: bin/
    

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

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

相关问题