【问题标题】:Doesn't find my main class in a jar在罐子里找不到我的主要课程
【发布时间】:2013-07-26 15:17:22
【问题描述】:

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

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

有什么解决办法或建议吗?

谢谢!

【问题讨论】:

  • 请发布: - 用于创建 Jar 的命令 - 用于运行程序的命令 - 失败时的堆栈跟踪(即看到 Exception in thread "main" 时的完整错误消息等)
  • 这对我来说似乎是一个熟悉的情况。你的 startscript 看起来怎么样?
  • 好像find了你的main,但是抛出了java.lang.NoClassDefFoundError,可以加一些stacktrace吗?
  • 堆栈跟踪是“线程“主”中的异常 java.lang.NoClassDefFoundError: /bin/TextClient 原因:java.lang.ClassNotFoundException: .bin.TextClient at java.net.URLClassLoader$1.run (URLClassLoader.java:217) 在 java.security.AccessController.doPrivileged(Native Method) 在 java.net.URLClassLoader.findClass(URLClassLoader.java:205) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:321) 在sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294) at java.lang.ClassLoader.loadClass(ClassLoader.java:266) 找不到主类:/bin/TextClient。程序将退出。
  • 我使用“jar -cmf manifest.txt Server.jar Server”来创建 jar,作为 Server 包含所有档案的文件夹。我用“java -jar Server.jar”运行它

标签: java class exception jar main


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      在我的情况下的原因是计算机找不到声明的 jar 文件。参数-cp的使用让我变得开心起来。所以试试

      java -jar -cp ./Server.jar 
      

      编辑:

      我忘了提到我还必须提到包含主类的类的完整限定名。

      【讨论】:

        【解决方案4】:

        NoClassDefFoundError 表示该文件在编译时存在,但在运行时未找到。由于没有编译问题,因此创建了 jar,但在运行时,使用 java -jar jarfilenamefullyqualifiedclassname 之类的命令会引发此异常。检查类路径变量,确认您正在从命令窗口中的正确文件夹位置执行命令。 对于此类错误,我一直参考以下链接,它对我有用

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

        【讨论】:

          【解决方案5】:

          这个:

          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
          

          (这是搜索的地方。)

          【讨论】:

            【解决方案6】:

            我终于通过使用 Eclipse 的“导出”选项而不是手动创建它来解决它。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2016-11-30
              • 1970-01-01
              • 2022-01-13
              • 2020-05-31
              • 2020-10-24
              • 2012-11-08
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多