当前位置: 首页 > 知识库问答 >
问题:

在maven中排除了依赖项的bundle中未解决的约束

吉鸿宝
2023-03-14

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

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

执行命令时出错:无法在功能中启动捆绑包 mvn:com.mysema.querydsl/querydsl-jpa/2.5.0 在 feature querydsl-jpa-2.5.0: 未解决捆绑包中的约束 com.mysema.querydsl.jpa [223]: 无法解决 223.0: 缺少要求 [223.0] 包;(

mvn项目依赖项:树不返回任何hibernate依赖项。这是否意味着即使明确排除了依赖项,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>

共有1个答案

龚奕
2023-03-14

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

如果该捆绑包声明了对hibernate的依赖,那么您应该假设它确实需要Hibernat。如果您确定依赖项是可选的,您应该向捆绑包的所有者报告错误。在等待修复时,您可以选择重建捆绑包,向hibernate捆绑包添加<code>optional=true

 类似资料:
  • 问题内容: 我有一个项目,该项目依赖于由供应商控制的工件。该工件包含一些我依赖的类,其中一些类较旧并且会引起问题。有没有办法让Maven自动扩展jar,删除类并将它们重新打包为依赖项?我会举一个例子。 所以- 我需要使用在项目网站,但我需要使用从神器。我无法修改Supplier:artifact或us:dependency。 有任何想法吗?! 问题答案: 从版本2.0.9开始,maven保留了类路

  • 谁能告诉我Maven中的依赖项Hamcrest有什么问题吗?这是一个遗憾,但我不能在这里附上截图。 当我试图更新Maven索引时,什么也没有发生。

  • 我在我的项目中遇到了依赖关系冲突的问题。特别是,slf4j日志记录有两种实现:slf4j-简单和logback-经典,我得到了 在运行时。 logback-classic对我来说是必备的依赖项(因为dropwizard),但slf4j-simple不是真的,我想把它从我的uber项目中去掉。只是没那么容易。 我的“uber jar”依赖于“small jar”,而“small-jar”又依赖于“s

  • 我有一个编译和运行时所需的依赖项,但我想在运行测试时将其排除。这可能吗?也许,通过设置个人资料?但是,如何仅在生命周期阶段停用它?

  • 我正在尝试解决我的eclipse项目中的maven依赖项。 依赖项已经下载到我的maven dependencies文件夹中(如下所示) 然而,import语句仍然没有解析。 在我的java构建路径中,存在Maven Dependencies文件夹。 到目前为止,我已经尝试在命令行上重建项目并在eclipse中刷新它;我尝试在eclipse中重建它;我尝试在eclipse中更新项目。 似乎什么都没