【发布时间】: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方法是否存在或不存在~