在 Eclipse IDE 中获取“错误:无法找到或加载主类 aQute.launcher.Launcher”,即使它在命令行中工作也是如此
Posted
技术标签:
【中文标题】在 Eclipse IDE 中获取“错误:无法找到或加载主类 aQute.launcher.Launcher”,即使它在命令行中工作也是如此【英文标题】:Getting "Error: Could not find or load main class aQute.launcher.Launcher" in Eclipse IDE even though it works in command line 【发布时间】:2021-07-15 08:39:40 【问题描述】:我目前正在进行一个使用 OSGi/Bndtools 的项目。我还是 OSGi/Bndtools 的新手,所以请耐心等待。
我一直在使用带有 Bndtools (5.0.1) 的 Eclipse IDE (2020-03) 进行开发。但是,我重新格式化了我的 PC,我似乎无法让我的 OSGi 程序在我的新 Eclipse IDE/Bndtools 设置上运行。 我目前正在使用带有 Bndtools (5.3.0 REL) 的 Eclipse (2020-03)。 (我还没有找到下载旧版 Bndtools 5.0.1 的方法)。
错误摘要:
当我单击 BND 运行描述文件 (stub.bndrun
) 的“运行 OSGi”按钮时,我在 Eclipse 控制台中看到以下错误:
Error: Could not find or load main class aQute.launcher.Launcher
控制台没有给出其他文本,OSGi程序运行失败。
但是,当我在终端中执行以下行时,我的 OSGi/Bnd 程序确实在运行:
bnd stub.bndrun
其中stub.bndrun
是同一个 BND 运行描述文件。
编辑:这是您可以用来重现我的问题的存储库:https://github.com/vorajeem/bndtools_error_reproduce_public.git
stub.bndrun
的其他详细信息如下:
-runfw: org.apache.felix.framework;version='[5.2.0,5.2.0]'
-runee: JavaSE-1.8
-runsystemcapabilities: $native_capability
-resolve.effective: active
-runvm: -Dosgi.console
我认为我的问题类似于以下问题中给出的问题:Could not find main class while it does exist。 但我不明白上面链接中问题的答案。
尝试 1: 根据上面给出的问题 #27457710 的答案,我已将 Apache Felix 框架 (5.2.0) 添加到“运行包”中,但仍然收到相同的错误消息。
我在 *** 上看到了带有类似错误消息的其他问题(即 Could not find or load main class [package-name]
。但是,没有提及 Bndtools - 我认为我的问题可能与我的 PC 上设置 Bndtools 的方式有关。
尝试 2: 我已将 'biz.aQute.launcher' (3.0.0) 添加到我的 'Run Bundles' 中,但我仍然收到相同的错误消息。
请求您的帮助。提前致谢。
编辑:
我已将-runvm -verbose:class
添加到stub.bndrun
,然后单击“运行 OSGi”/“调试 OSGi”。输出是加载的类的长列表(以及我之前看到的错误)。我添加了输出的前两行和最后几行。似乎成功加载了所有JAVA包(加载的包都以java.
或sun.
前缀开头,它们都来自/usr/lib/jvm/java-8-openjdk-amd64/jre/lib
)。
但是,它找不到任何 OSGi/Bndtools 包(??)。我想知道我的 Bndtools 存储库是否设置正确?...我怎样才能确保是这种情况?
[Opened /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.Object from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.io.Serializable from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
...
[Loaded java.text.AttributedCharacterIterator$Attribute from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.text.Format$Field from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.text.MessageFormat$Field from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.Shutdown from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.Shutdown$Lock from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
Error: Could not find or load main class aQute.launcher.Launcher
【问题讨论】:
能否将-runtrace = true
添加到 bndrun 文件并显示输出?
对不起...我尝试将runtrace: true
作为单独的行添加到.bndrun 文件中,但在没有任何额外输出的情况下,我仍然在控制台中收到相同的错误(即Error: Could not find or load main class aQute.launcher.Launcher
)。除了上面给出的错误行之外,控制台不显示其他输出行。我还尝试添加文本runtrace = true
(根据您的建议逐字添加),但我仍然看到相同的输出。我想知道我是否将这 runtrace: true
行放在 .bndrun 文件中的错误“位置”?
将runtrace: true
添加到我的 .bndrun 文件后,我仍然可以在终端中运行 OSGi 程序,但不能在 Eclipse/bndtools 中运行。当我在终端中执行命令 bnd stub.bndrun
时,我的 OSGi 程序成功运行,并添加了很多跟踪行。我在下面给出了一些输出:# properties launch.name=runtime, launch.noreferences=false, launch.trace=true, launch.notificationPort=-1, launch.system.capabilities=osgi.native;osgi.native.osname:List<String>="Linux";osgi.native.osversion:Version=4.15.0.-142-generic;osgi.native.processor:List<String>="x86-64,amd64,em64,
...
我还尝试在 Eclipse 中单击我的文件 stub.bndrun
的“调试 OSGi”图标。这也会产生相同的单个错误行。
您可以添加-runvm -verbose:class
。这应该显示类加载并可能会有所启发
【参考方案1】:
我遇到了同样的问题。我只是想启动一个使用 bndtools-template 生成的空 OSGi-Component。
在我的情况下,我只需要删除生成的 module-info.java 并且 bndrun 可以正确启动。
【讨论】:
以上是关于在 Eclipse IDE 中获取“错误:无法找到或加载主类 aQute.launcher.Launcher”,即使它在命令行中工作也是如此的主要内容,如果未能解决你的问题,请参考以下文章