【问题标题】:Jar file couldn't load or find main classJar 文件无法加载或找到主类
【发布时间】:2016-04-04 15:31:36
【问题描述】:

我一直在尝试从 Jarfile 运行应用程序,但它一直打印出来:

“无法找到或加载主类...”。

我尝试使用来自 thread 的信息来解决这个问题,但似乎一切都没用。老实说,我越来越绝望了,因为这是一个微不足道的问题。

无论如何,我做了什么:

Main-Class: com.test.Test

我的清单属性:

jar cfm test.jar manifest.txt <full_path>/out/com/test/*.class

这是打包到 jar 文件(Test.class 文件)中的内容

测试类:

package com.test;

public class Test {
  public static void main(String[] args) {
      System.out.println("Hello World");
   }
}

【问题讨论】:

  • 你是如何尝试调用它的?
  • 您似乎没有正确打包 jar(您没有保留文件夹结构)。我想你想要jar cfm test.jar manifest.txt &lt;full_path&gt;/out/
  • 你是用java -jar 还是java -cp 运行它?
  • @PhilEvening 你试过我的答案了吗?我认为您应该尝试并接受它;)
  • 也许我应该尝试在清单中使用 Class-Path Header。或者这是一个不同的故事?

标签: java shell jar cmd


【解决方案1】:

你应该正确地打包这个类。做

jar cfm test.jar manifest.txt com/test/*.class

在文件夹com 的父文件夹中。通过提供绝对路径(你做的方式),类文件被错误地打包。

【讨论】:

  • 或使用-C,如stackoverflow.com/a/18972208/2868801。此外,当您在清单中只需要 Main-class 时,您可以使用 -e 和类名而不是 -m 和清单文件。
  • @dave_thompson_085 这是一个很好的建议,但是 OP 的问题是该类没有正确打包。只需更改类的路径(相对路径)就足够了,其他一切都保持不变。
  • 将完整路径更改为相对路径不起作用 Kedar 和 @ThierryB
  • @PhilEvening 我很惊讶它没有。在发布此解决方案之前,我自己尝试过,效果很好。目前尚不清楚为什么它对您不起作用。请参阅this gist with the series of commands
  • 感谢您的帮助,最后我只是使用了我的IDE的jar文件创建工具。仍然很奇怪,它不适用于 cmd...
【解决方案2】:

首先,如果您使用的是 Eclipse IDE,有一些工具,例如 Fat Jar Plugin,可以帮助您打包您的构建。

其次,有 Maven 来处理您的依赖关系,并在一切正常的情况下构建您需要的包。在你的情况下,我会寻找Apache Maven Jar Plugin

最后,就像您尝试做的那样,使用命令行的老派方式。 正如 Eliott Frisch 在您的问题 cmets 中所说,您不需要在 jar cfm test.jar manifest.txt &lt;full_path&gt;/out/ 中提供主类的完整路径。 还有是因为manifest.txt已经给出了包信息!

【讨论】:

    猜你喜欢
    • 2012-10-13
    • 2019-07-21
    • 2020-02-18
    • 2017-02-07
    • 2017-11-06
    • 2015-03-05
    • 2021-12-10
    • 1970-01-01
    • 2015-09-22
    相关资源
    最近更新 更多