我有pom.xml,
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.eclipse.microprofile</groupId>
<artifactId>microprofile</artifactId>
<version>1.3</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>7.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.enterprise</groupId>
<artifactId>cdi-api</artifactId>
<version>1.2</version>
<scope>provided</scope>
</dependency>
</dependencies>
我无法理解为什么我需要在依赖关系下指定cdi-api上的版本,因为它已在微文档中定义(内部依赖管理)。
答案 0 :(得分:2)
这个pom不是定义依赖项版本的标准bom,但必须像标准依赖项一样使用:https://github.com/eclipse/microprofile-bom
此款式的BOM不适用于 dependencyManagement部分,使用import 范围,您不能添加在BOM中声明的依赖项 通常使用该样式的BOM来完成版本元素。
你实际上需要依赖那个pom:
<dependency>
<groupId>org.eclipse.microprofile</groupId>
<artifactId>microprofile</artifactId>
<type>pom</type>
</dependency>
如果您希望一切正常,请不要忘记添加类型pom并在依赖关系管理中指定版本或引用此版本的类型为pom。 glytching忘记了类型pom,这就是为什么它不起作用。
答案 1 :(得分:1)
org.eclipse.microprofile:microprofile
artifact声明对javax.enterprise:cdi-api
的依赖关系,因此如果您在POM中声明org.eclipse.microprofile:microprofile
作为依赖关系,则会传递javax.enterprise:cdi-api
。
在您的问题示例中,您在org.eclipse.microprofile:microprofile
部分中声明了<dependencyManagement>
,此部分合并了每个依赖项的版本,范围和排除项的管理,但是为了在项目中使用该依赖项您必须将其包含在<dependency>
部分。
因此,如果您将此添加到<dependency>
部分...
<dependency>
<groupId>org.eclipse.microprofile</groupId>
<artifactId>microprofile</artifactId>
</dependency>
...然后org.eclipse.microprofile:microprofile
将包含在您的项目中,因此javax.enterprise:cdi-api
将被包含在内,并且您不必明确声明它。