我正在开发一个 Eclipse插件,我尝试用等效的 OSGi包替换普通的jar 库。我使用 Apache Felix maven-bundle-plugin来构建jar文件并将其转换为OSGi包。在pom.xml中,我为我的插件定义了<Export-Package>
uses
javax.xml.namespace
包,并将<Embed-Dependency>
定义为库的所有包(依赖项)包含,包括javax.xml.namespace
包。当我在插件的类路径中使用库时,我可以正常运行插件。现在,我从库中创建的OSGi包中导入包,我收到此错误:
java.lang.LinkageError: loader constraint violation: loader (instance of org/eclipse/osgi/internal/loader/EquinoxClassLoader) previously initiated loading for a different type with name "javax/xml/namespace/QName"
似乎实例化了QName
类的两个不同版本(一个来自插件,另一个来自库?)但我在库和插件中都需要这个类。我尝试将包中的javax.xml.namespace包导入插件,但这没有帮助。此外,我尝试在插件的另一个类中移动与库相关的代码,我不会导入QName
类,但这并没有改变。这似乎是一个棘手的问题。我是否需要更改 MANIFEST.MF 或捆绑软件包的嵌入式软件包中的内容?或者我是否需要更改插件导入的软件包中的内容?任何帮助表示赞赏。