【问题标题】:Could not find main class while it does exist确实存在时找不到主类
【发布时间】:2015-02-11 23:52:09
【问题描述】:

我在运行 bnd 启动器时遇到了问题。实际问题是在使用 gradle 构建期间出现的,但是当我直接调用 jar 时它也不起作用。 Launcher 类确实存在于那个 jar 中,并且它确实有一个 main 方法。有人知道我为什么会收到这个错误吗?

$ java -cp cnf/cache/biz.aQute.launcher/biz.aQute.launcher-1.4.0.jar aQute.launcher.Launcher
Error: Could not find or load main class aQute.launcher.Launcher

当我阅读jar的内容时,我可以看到Launcher类确实存在。

$ jar tvf cnf/cache/biz.aQute.launcher/biz.aQute.launcher-1.4.0.jar
  1490 Fri Sep 26 06:49:00 CEST 2014 META-INF/MANIFEST.MF
       ...
  1586 Fri Sep 26 06:49:00 CEST 2014 aQute/launcher/Launcher$1.class
  2270 Fri Sep 26 06:49:00 CEST 2014 aQute/launcher/Launcher$2.class
   794 Fri Sep 26 06:49:00 CEST 2014 aQute/launcher/Launcher$3.class
  1133 Fri Sep 26 06:49:00 CEST 2014 aQute/launcher/Launcher$4.class
  1100 Fri Sep 26 06:49:00 CEST 2014 aQute/launcher/Launcher$5.class
  1260 Fri Sep 26 06:49:00 CEST 2014 aQute/launcher/Launcher$AllPermissionCollection.class
  1149 Fri Sep 26 06:49:00 CEST 2014 aQute/launcher/Launcher$AllPolicy.class
 37566 Fri Sep 26 06:49:00 CEST 2014 aQute/launcher/Launcher.class
       ...

我还尝试从另一个随机 jar 加载另一个随机类,并且确实有效。仅当缺少 main 方法时,我才会收到不同的错误(在类中找不到 Main 方法)。

而且所有这些文件的权限都是一样的,否则我也无法运行'jar tvf'。

那么,有什么想法吗?

【问题讨论】:

  • jar 是否包含所有必需的类?需要另一个未找到的类的类可能会触发这样的错误。
  • 发布完整的堆栈跟踪。
  • 没有堆栈跟踪。只有这个消息。当我将 -verbose 选项添加到 java 时,我只看到从 rt.jar 加载的类。
  • 另外,如果它缺少必需的类(由于其他一些依赖性),我应该在 NoClassDefFoundError 上看到 ClassNotFoundException。只有在找不到类文件时才会出现此消息。但它就在那里!另外,我尝试添加 OSGi 依赖项(我可以看到的唯一一个 github.com/bndtools/bnd/blob/master/biz.aQute.launcher/src/…),但这没有帮助。
  • 尝试使用JAD Decompiler查看你想要的Class,并检查main方法是否存在或不存在~

标签: java classpath bnd


【解决方案1】:

我找到了解决方案。似乎我缺少一个依赖项,但它是一个 OSGi 框架。当我将 felix 框架添加到类路径时,它确实启动了。显然,Launcher 类实现了 OSGi 框架的接口,当它找不到此类时,它根本不会加载该类。这可能是对 java 运行时的改进(主要是详细输出可能会提到这个问题)。

现在的问题是为什么 bnd 试图在没有框架的情况下启动启动器,但这是我问过他们的问题。

【讨论】:

  • 我遇到了同样的问题。显然,Bndtools/Bnd 在 2019 年初仍然存在同样的缺陷。如果能修复它会很好,但它的优先级可能太低了。
猜你喜欢
  • 2017-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-08
  • 2012-10-05
  • 2023-03-02
  • 1970-01-01
  • 2013-05-20
相关资源
最近更新 更多