java - 使用约束冲突。无法解析资源 -javax.xml.bind.annotation 和 jakarta.xml.bind-api
问题描述
我搜索了一个looooot,但找不到解决我问题的方法。
我正在使用 osgi、karaf 和 java 8。
我有一些模块,例如:
这个模块中的 WEBSERVICE-Something 可以说 API、持久性、适配器
持久性和 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))
请注意,我还有其他 web 服务模块,其中一些工作正常,我检查了 pom,它们具有相同的依赖项和相同的版本
数据源也很好,我已经尝试添加一些功能,如 hibernate.entityManager 但它不起作用。
解决方案
根据您提供的有限信息,您很可能在运行时有由不同捆绑包导出的同一包的两个版本。
这本身不是问题,但正如本答案中所解释的,它会导致错误
- bundle
A
需要来自的包B
和来自的包C
- bundle
B
需要不同版本的相同包C
在您的特定情况下,有问题的包似乎是javax.xml.bind.annotation
通过
org.apache.felix.framework
bundle 和jakarta.xml.bind-api
bundle 以 2 个不同版本导出的。
如果不知道您尝试安装的捆绑软件的确切要求和功能是什么,很难说解决这个问题的最佳方法是什么。
更新:
以下是一些可用于调试情况的方法:
- 调用
package:exports | grep javax.xml.bind.annotation
会告诉你哪些包以什么版本导出包 - 调用
package:imports | grep javax.xml.bind.annotation
会告诉你哪些包以什么版本导入包 - 致电
bundle:diag <YOUR_BUNDLE_ID>
将为您提供捆绑未解决的详细信息
推荐阅读
- magento2 - Magento2.0 服务器要求 - 需要指导
- amp-html - AMP 中的 Brightcove 视频对接
- apache-storm - [Storm]如果其中一个失败,锚定到相同消息 id 的其他元组会发生什么?
- java - BridJ:加载 Clp.dll 时发生 LoadLibrary 错误:动态链接库 (DLL) 初始化例程失败
- oracle - varchar 立即执行
- json - 在没有反斜杠的请求中发送 JSON
- python - pyspark 中的重型有状态 UDF
- xamarin - 来自 HttpWebResponse 的流上的 xamarin IOS ReadToEnd() 不起作用
- wpf - 如何在 Visual Studio 中安装这些饼图控件?
- if-statement - 为什么 if(not nil) 会给我一个 ArgumentError?