在 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”,即使它在命令行中工作也是如此的主要内容,如果未能解决你的问题,请参考以下文章

Eclipse“错误:无法找到或加载主类”

在 Eclipse IDE 之外启动运行配置

eclipse4.4对应的scala版本插件是多少

java无法找到或加载主类

使用Wing IDE重命名对象

构建错误:无法找到org.openqa.selenium.internal.Locatable的类文件