为什么需要指定版本依赖?

时间:2018-01-28 18:06:51

标签: maven maven-3

我有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上的版本,因为它已在微文档中定义(内部依赖管理)。

2 个答案:

答案 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将被包含在内,并且您不必明确声明它。