我正在构建一个在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-javaee8
BOM工件。
我错过了什么/误解了什么?
@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功能的信息。