我遇到了运行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'。
那么,有什么想法吗?
答案 0 :(得分:2)
我找到了解决方案。似乎我错过了依赖,但它是一个OSGi框架。当我将felix框架添加到类路径时,它确实启动了。显然,Launcher类实现了OSGi框架的接口,当它无法找到这个类时,它根本不会加载该类。这可能是对java运行时的改进(主要是详细输出可能会提到这个问题)。
现在的问题是为什么bnd尝试用框架启动启动器,但这是我向他们提出的问题。