提问者:小点点

无法找到cdi-api依赖通过野蝇BOM


我正在构建一个在Wildfly 14.0.1-Final之上运行的项目。

我想尝试一下maven的BOM特性,所以我想:"我将把Wildfly 14BOM添加到我父POM的依赖管理中,然后我将只需要定义每个工件的groupId和artifactId,而不关心版本号/作用域"。

所以,在我父母的POM中,我确实补充了:

<dependencyManagement>
   <dependencies>
      <dependency>
         <groupId>org.wildfly.bom</groupId>
         <artifactId>wildfly</artifactId>
         <version>14.0.1.Final</version>
         <type>pom</type>
      </dependency>
   </dependencies>
</dependencyManagement>

对于我的孩子们POM,我确实添加了对CDIAPI的引用:

<dependencies>
   <dependency>
      <groupId>javax.enterprise</groupId>
      <artifactId>cdi-api</artifactId>
   </dependency>
</dependencies>

然而,maven抗议说它没有cdi-api的版本。

错误是:

错误][错误]在处理POM时遇到一些问题:javax. Enterprise的[ERROR]“依赖.依赖.版本”:cdi-api:缺少jar。@第29行,第15列@

我还尝试了Wildfly-javaee8BOM工件。

我错过了什么/误解了什么?


共2个答案

匿名用户

@JamesR. Perkins的评论让我意识到我没有设置POM的导入范围。此外,正确的工件是org.wildfly.bom:Wildfly-javaee8

<dependencyManagement>
   <dependencies>
      <dependency>
         <groupId>org.wildfly.bom</groupId>
         <artifactId>wildfly-javaee8</artifactId>
         <version>14.0.1.Final</version>
         <scope>import</scope>
         <type>pom</type>
      </dependency>
   </dependencies>
</dependencyManagement>

James是对的,当我需要使用依赖项时,我需要定义提供的范围,否则它的cdi-api. jar将最终打包在耳朵中,这可能会导致问题。

<dependencies>
   <dependency>
      <groupId>javax.enterprise</groupId>
      <artifactId>cdi-api</artifactId>
      <scope>provided</scope>
   </dependency>
</dependencies>

匿名用户

当您将依赖项添加到父POM的部分时,它会为该依赖项设置默认版本,但不会自动将其添加到子POM的依赖项部分。

在您的例子中,您需要将for cdi-api添加到子POM部分,而不仅仅是父POM部分。

这应该像这样:

<dependencies>
   <dependency>
      <groupId>javax.enterprise</groupId>
      <artifactId>cdi-api</artifactId>
      <version>14.0.1.Final</version> <!-- version should match the version of wildfly BOM you are using -->
   </dependency>
</dependencies>

此外,您可以使用Wildfly-javaee8BOM工件而不是您正在使用的Wildfly工件,它涵盖了您的Wildfly应用程序开发所需的所有依赖项。

你也可以查看你的野蝇留档,了解更多关于如何在野蝇中使用BOM功能的信息。