在jar中找不到我的主类

时间:2013-07-26 11:14:23

标签: java class exception jar main

我正在开发一个包含三个类的程序,还包括一些外部jar档案和类。当我在Eclipse中运行它时,它可以正常工作,但我需要尝试其他一些程序,所以我需要在控制台上运行它。我将所有文件保存在一个文件夹中,该文件夹包含另外两个文件夹,一个包含我创建的.class,另一个包含.java和.jar存档以及包含外部类的文件夹。我试图创建一个包含这个文件夹和清单的.jar存档,在那里我告诉了主要类的位置。

当我运行它时,我收到“线程中的异常”主“java.lang.NoClassDefFoundError”,所以它没有找到主要的类,但我不知道为什么。我尝试了一些不同的方法来在清单中定义它并更改类路径,但它仍然不起作用。

任何解决方案或建议?

谢谢!

6 个答案:

答案 0 :(得分:1)

尝试使用JarSplice,它可以让你定义主类。

答案 1 :(得分:1)

NoClassDefFoundError表示文件在编译期间存在,但在运行时未找到。由于没有编译问题,因此创建了jar,但在运行时,在使用java -jar jarfilename,fullqualifiedclassname之类的命令时,它抛出了此异常。检查classpath变量,验证您是否在命令窗口中从正确的文件夹位置执行命令。 我总是在下面的链接中提到这些错误,它对我有用

http://javaeesupportpatterns.blogspot.in/2012/06/javalangnoclassdeffounderror-how-to.html

答案 2 :(得分:0)

在创建项目时,例如ABC IDE通常Netbeans创建源文件夹并将主类创建为包含主类的ABC.java。在Netbeans IDE中,如果主要类不是ABC,则允许您提及它,如果不是ABC,则必须创建在ABC.java类中执行应用程序时要运行的类的实例。

答案 3 :(得分:0)

在我的一个项目中,我也遇到了同样的情况。问题总是误解了我的错误信息。

在我的情况下的原因是计算机无法找到声明的jar文件。使用参数-cp让我感到高兴。所以试试

java -jar -cp ./Server.jar 

编辑:

我忘了提到我还要提到包含主要类的完整的类名称。

答案 4 :(得分:0)

此:

The stacktrace is "Exception in thread "main" java.lang.NoClassDefFoundError: /bin/TextClient 

看起来像你的清单是错的。要更正它,您可以使用:

jar -uvfe Server.jar full.name.of.your.MainClass

注意:某些类文件的文件/路径名! 这将创建一个MANIFEST,告诉full.name.of.your.MainClass是您的主要类。

此外,如果您的jar包含以下条目:

bin/Foo.class
bin/...

您可能是从错误的位置创建了JAR文件(除非您的TLD是bin)。 如果您的主要类名为org.adepts.Main,则顶级条目应为:

org/adepts/Main.class

(这是搜索的地方。)

答案 5 :(得分:0)

我最终通过使用Eclipse“导出”选项解决了这个问题,而不是手动创建它。