使用约束冲突。无法解析资源 -javax.xml.bind.annotation 和 jakarta.xml.bind-api

Uses constraint violation. Unable to resolve resource -javax.xml.bind.annotation and jakarta.xml.bind-api

我搜索了 looooot,但找不到解决我的问题的方法。

我正在使用 osgi、karaf 和 java 8.

我有一些模块,例如:

WEBSERVICE-一些东西 在这个模块中可以说 API、PERSISTENCE、ADAPTER

持久性和 api 启动正常,但适配器给出错误:

Uses constraint violation. Unable to resolve resource adapter [adapter [288](R 288.2)] 
because it is exposed to package 'javax.xml.bind.annotation' from resources 
org.apache.felix.framework [org.apache.felix.framework [0](R 0)] and 
jakarta.xml.bind-api [jakarta.xml.bind-api [79](R 79.0)] via two dependency 
chains.

链条在适配器中,api。

但这意味着什么?

我可以将它作为功能安装,它们都会启动,但我的另一个包将放在 GracePeriod 上,如果我在 karaf 上进行 DIAG,它会说:

Status: GracePeriod
Declarative Services
Blueprint
01/09/19 19:00
Missing dependencies:
(&(osgi.unit.name=example_db)(objectClass=javax.persistence.EntityManager))

请注意,我还有其他网络服务模块,其中一些工作正常,我检查了 pom,它们具有相同的依赖关系和相同的版本

数据源也很好,我已经尝试添加一些功能,例如 hibernate.entityManager,但它不起作用。

根据您提供的有限信息,您很可能在运行时通过不同的包导出了同一包的两个版本。

这本身不是问题,但如 中所述,当

时会导致错误
  • bundle A 需要来自 B 的包和来自 C
  • 的包
  • bundle B 需要来自 C
  • 的相同包的不同版本

在您的特定情况下,有问题的包似乎是 javax.xml.bind.annotation,它似乎以 2 个不同的版本导出 org.apache.felix.framework 捆绑包和 jakarta.xml.bind-api 捆绑包。

如果不知道您要安装的捆绑包的确切要求和功能,很难说什么是解决该问题的最佳方法。

更新:

这里有一些你可以用来调试情况的东西:

  • 调用 package:exports | grep javax.xml.bind.annotation 会告诉您哪些包以什么版本导出包
  • 调用 package:imports | grep javax.xml.bind.annotation 会告诉您哪些包在哪些版本导入包
  • 调用 bundle:diag <YOUR_BUNDLE_ID> 将为您提供捆绑未解析的详细信息