【问题标题】:unresolved constrain in bundle that had a dependency excluded in maven在 Maven 中排除了依赖项的捆绑包中未解决的约束
【发布时间】:2012-05-23 20:48:55
【问题描述】:

我在我的 osgi 应用程序中使用 querydsl 库。工件 querydsl-jpa 具有 hibernate-jpa-2.0-api 作为依赖项。

我在 pom.xml 中添加了这样的排除项,因为我不使用休眠。仍然当我尝试启动我的服务(通过 karaf features.xml 文件)时,我得到了这个:

执行命令时出错:无法在功能 querydsl-jpa-2.5.0 中启动捆绑 mvn:com.mysema.querydsl/querydsl-jpa/2.5.0:捆绑 com.mysema.querydsl.jpa 中未解决的约束[223]:无法解析 223.0:缺少要求 [223.0] 包; (&(package=org.hibernate)(version>=3.6.8.Final))

mvn 项目依赖:tree 不返回任何休眠依赖。这是否意味着即使明确排除了依赖项,osgi 依赖项也仅由 querydsl 包的清单文件确定?

    <dependency>
        <groupId>com.mysema.querydsl</groupId>
        <artifactId>querydsl-jpa</artifactId>
        <version>2.5.0</version>
        <exclusions>
        <exclusion>
        <groupId>org.hibernate.javax.persistence</groupId>
  <artifactId>hibernate-jpa-2.0-api</artifactId>
        </exclusion>
        </exclusions>
    </dependency>

以及 features.xml 的摘录

 <feature name='querydsl-jpa' version='2.5.0'>
  <bundle>mvn:org.apache.felix/org.osgi.compendium/1.4.0</bundle>
  <bundle>mvn:org.apache.geronimo.specs/geronimo-jpa_2.0_spec/1.1</bundle>
  <bundle>mvn:com.mysema.querydsl/querydsl-core/2.5.0</bundle>
  <bundle>mvn:com.mysema.commons/mysema-commons-lang/0.2.2</bundle>
  <bundle>mvn:com.mysema.querydsl/querydsl-sql/2.5.0</bundle>
  <bundle>mvn:com.mysema.querydsl/querydsl-jpa/2.5.0</bundle>
</feature>

【问题讨论】:

    标签: dependencies osgi apache-karaf querydsl


    【解决方案1】:

    pom.xml 确定在构建时发生的事情,而不是在运行时。很容易混淆在 pom 中声明的依赖项和在清单中声明的​​依赖项,因为两者似乎都涉及依赖项,但它们实际上非常不同。 OSGi 运行时不知道也不关心 maven,因此它从不查看您的 pom 文件。 OSGi 就依赖关系进行通信的方式是通过清单。显然,pom 中的内容会影响清单中的内容,但仅适用于您构建的捆绑包。在这里,您没有重建 querydsl 包,因此清单是它附带的。

    如果那个包声明了对休眠的依赖,你应该假设它确实需要休眠。如果您确定依赖项是可选的,则应向捆绑包的所有者报告错误。在等待修复时,您可以选择重新构建包,将optional=true 指令添加到休眠包,或者制作一个导出丢失的休眠包的虚拟包。这将使 querydsl 包启动,但我会非常谨慎地使用这种方法。您正在使用 hack 绕过 OSGi 的安全机制,并且您冒着在运行时遇到 NoClassDef 异常和其他故障的风险,除非使用 hibernate 的代码路径完全未使用。

    【讨论】:

    • 谢谢。我以前很怕那个。我真的不想在我的包中包含hibernate,所以我想我会和querydsl的人谈谈(或者停止使用它)
    • 他们最近修复了这个问题。所以下一个版本应该没问题:github.com/mysema/querydsl/issues/147
    猜你喜欢
    • 2017-09-11
    • 2013-10-18
    • 2011-06-19
    • 2011-03-14
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 2017-06-25
    相关资源
    最近更新 更多