使用 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 中的依赖项中。
谢谢!!
我正在 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 中的依赖项中。 谢谢!!