【问题标题】:Running jar file returns error: Error: Could not find or load main class MyClass Caused by: java.lang.ClassNotFoundException: MyClass运行 jar 文件返回错误:错误:无法找到或加载主类 MyClass 原因:java.lang.ClassNotFoundException:MyClass
【发布时间】:2020-12-19 02:51:29
【问题描述】:

我有几个 .class 文件,我想将其转换为一个 .jar 文件。这是 jar 文件的清单:

清单.MF:

Main-Class: Server

这是我用来编译文件的命令:

jar cfm Server.jar META_INF/MANIFEST.MF ../server/Server.class ../server/message/User.class ../server/message/ServerNode.class ../server/message/ServerHub.class ../server/message/Chattype.class ../server/message/Chat.class

最后是我的文件夹结构:

message-platform - 
   dist -
     META-INF -
        MANIFEST.MF
   server -
     Server.class
     message -
         User.class
         ServerNode.class
         Chat.class
         ServerHub.class
         Chattype.class
         

这是我收到的错误消息:

Error: Could not find or load main class Server
Caused by: java.lang.ClassNotFoundException: Server

这就是我执行 .jar 文件的方式:

java -jar Server.jar

当使用 Atom 检查 jar 文件时,会出现:

有人可以帮我解决这个问题吗?谢谢

更新: 我创建了服务器包,现在一切正常。感谢所有试图提供帮助的人。

【问题讨论】:

  • Manifest 文件名为 MANIFEST.MF,并放置在 JAR 内的 META-INF 文件夹中 - 请参阅 here
  • @andrewjames 没错,但jar 工具可能只是从文本文件中读取信息并将其添加到META-INF/MANIFEST.MF 文件中?不过不确定(我很少直接使用jar 工具)。
  • @andrewjames 修复了它,结果相同
  • 将该 jar 文件解压缩到另一个文件夹并检查它是否具有您想要的确切文件夹结构。 Server.class 应该在根文件夹中,MANIFEST.MF 应该在 META-INF 中,所有其他类文件应该在预期的位置。
  • @MNEMO 刚刚将解压文件的图片添加到不同的文件夹中

标签: java jar executable-jar


【解决方案1】:

你说过你的 Server.class 不属于任何包,如果是这样,你的 Server.class 不应该在 jar 文件的 server 文件夹下。如果您想将服务器文件夹视为项目结构中的“src”文件夹,请使用“-C”选项,例如:

jar cfm Server.jar manifest.txt -C server Server.class

对于 server/message 下的所有其他类文件,您应该执行类似的操作。

【讨论】:

    【解决方案2】:

    包名是类名的一部分server.Server 不是 Server。我想你想要前者,而不是后者。改变

    Main-Class: Server
    

    Main-Class: server.Server
    

    【讨论】:

    • 根据 OP 的 cmets,尽管 Server 类位于名为 server 的文件夹中,但它似乎没有包语句。所以无法找到Server,因为它位于server/Server.class,而server.Server 无法加载,因为server/Server.class 没有声明自己在server 包中。
    【解决方案3】:

    不确定如何完全解决此问题,但我认为这与您的 IDE 的类路径配置有关。确保它使用标准 JDK,并且所有源等都正确链接。也许尝试使用类路径选项 -cp (尽管大多数 IDE 会为您处理这个)。例如:

    java -cp /home/User/where/my/jar/is -jar example.jar
    

    老实说,我只是在进行一些 android 开发(在 JVM 本身上运行)时才真正遇到过这个问题,所以我只是提出建议。希望你能明白!

    【讨论】:

      猜你喜欢
      • 2022-01-07
      • 2017-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-17
      • 1970-01-01
      • 1970-01-01
      • 2018-12-16
      相关资源
      最近更新 更多