我正在开发一个Eclipse 插件,并尝试用等效的OSGi bundle替换普通的 jar库。我使用Apache Felix maven-bundle-plugin 构建 jar 文件并将其转换为 OSGi 包。在 pom.xml 中,我定义了我的插件所需的包,还定义了库包含的所有包(依赖项),包括包。当我在插件的类路径中使用库时,我可以正常运行插件。现在,我从库中创建的 OSGi 包中导入包,我收到此错误:<Export-Package>
uses
javax.xml.namespace
<Embed-Dependency>
javax.xml.namespace
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或捆绑包的嵌入式包中的某些内容,还是需要更改插件的导入包中的某些内容?任何帮助表示赞赏。