使用 OSGI 的 eclipse CDT 插件中的 LinkageError

LinkageError in eclipse CDT plugin that using OSGI

我正在 windows 上编写 eclipse CDT 插件。 我想将代码写入项目中的现有文件,但我需要自动格式化代码。我在谷歌上搜索了又搜索,找到了这个解决方案:

CodeFormatter formatter = ToolFactory.createDefaultCodeFormatter(null);
TextEdit formatEdit = formatter.format(CodeFormatter.K_UNKNOWN, source, 0, source.length(), 0, null);
IDocument dc = new Document(source);
formatEdit.copy();
formatEdit.apply(dc);
System.out.println(dc.get());

为了让这段代码正常工作(至少部分),我添加了以下导入:

import org.eclipse.cdt.core.ToolFactory;
import org.eclipse.cdt.core.formatter.CodeFormatter;
import org.eclipse.core.resources.IProject;
import org.eclipse.jface.text.Document;
import org.eclipse.jface.text.IDocument;
import org.eclipse.text.edits.TextEdit;

以及 class 路径和 plugin.xml 运行时定义中的以下库:

<classpathentry kind="lib" path="libs/org.eclipse.cdt.core_5.6.0.201402142303.jar"/>
<classpathentry kind="lib" path="libs/org.eclipse.osgi_3.9.1.v20140110-1610.jar"/>
<classpathentry kind="lib" path="libs/org.eclipse.osgi.services_3.3.100.v20130513-1956.jar"/>
<classpathentry kind="lib" path="libs/org.eclipse.osgi.services.source_3.3.100.v20130513-1956.jar"/>
<classpathentry kind="lib" path="libs/org.eclipse.osgi.source_3.9.1.v20140110-1610.jar"/>
<classpathentry kind="lib" path="libs/org.eclipse.osgi.util_3.2.300.v20130513-1956.jar"/>
<classpathentry kind="lib" path="libs/org.eclipse.osgi.util.source_3.2.300.v20130513-1956.jar"/>
<classpathentry kind="lib" path="libs/org.eclipse.text_3.5.300.v20130515-1451.jar"/>

我确信有这么多的依赖关系,代码会工作 - 但现在我正在调试,并在运行时得到以下异常:

java.lang.LinkageError: loader constraint violation: loader (instance of org/eclipse/osgi/internal/baseadaptor/DefaultClassLoader) previously initiated loading for a different type with name "org/eclipse/text/edits/TextEdit"

我看到这个话题已经被讨论过了,但我自己 - 没有找到解决方案。

有人能帮帮我吗?

我找到了解决方案。正如@greg-449 回答的那样,我不得不将想要的 jar 添加到 MANIFEST.MF 中的依赖项中。 谢谢!!