我正在尝试使用 Maven 添加 Hibernate 作为我的 OSGi 包的依赖项。在我的 POM 文件中,我有:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-osgi</artifactId>
<version>4.3.6.Final</version>
</dependency>
但是,当我运行时,出现错误:
org.osgi.framework.BundleException: bundle org.hibernate.core [8] 中 Unresolved 约束:无法解析 8.0:缺少要求 [8.0] osgi.wiring.package; (&(osgi.wiring.package=javax.transaction.xa)(version>=1.1.0)(!(version>=2.0.0))) [原因:无法解析 15.0:缺少要求 [15.0] osgi .接线.包; (osgi.wiring.package=javax.enterprise.context)]
所以我为 javax.enterprise.context 添加了另一个依赖项:
<dependency>
<groupId>javax.enterprise</groupId>
<artifactId>cdi-api</artifactId>
<version>1.2</version>
</dependency>
这解决了之前的错误,但导致了另一个错误:
自动属性安装:file:///path/to/project/hibernate/target/bundles/javax.inject-1.jar(org.osgi.framework.BundleException:无法创建包对象。 - java.lang.IndexOutOfBoundsException)
现在,我无法解决这个问题,甚至无法找出原因。我使用 Apache Felix。
最佳答案
那是行不通的。如果您想在 OSGi 中使用 Hibernate,您将需要一些实际上在 osgi 包中提供所需接口(interface)的包。 对于您当前的用例,我建议使用 Karaf 并安装 Apache Aries 的 JPA/JTA 功能。 Karaf 是一个 OSGi 容器,解决了许多依赖关系并具有易于安装的功能。 要将 Karaf 与 JPA 结合使用,只需执行以下操作
features:install jpa
features:install jta
features:install hibernate
这样您就应该设置为在 osgi 容器中使用 hibernate。 另一种方法是安装所有必需的 bundle 来运行带有 hibernate 和 jpa/jta 支持的蓝图 osgi。有关这些列表,请查看相应的功能文件。可用地址:Karaf
关于java - 将 Hibernate 与 OSGi 和 Maven 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26224537/