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

那么,有什么想法吗?

最佳答案

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

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

09-26 18:49