2

我在运行 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”。

那么,有什么想法吗?

4

1 回答 1

2

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

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

于 2014-12-15T08:09:55.403 回答