如何在没有版本标记的情况下定义maven依赖项?

时间:2015-02-03 12:34:42

标签: maven dependencies pom.xml

我有一个pom工作,没有在pom中定义依赖版本工作正常,另一个没有依赖版本不起作用。

工作的那个:

<project>
    <parent>
        <artifactId>artifact-parent</artifactId>
        <groupId>group-parent</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <dependencies>
        <dependency>
            <groupId>group-a</groupId>
            <artifactId>artifact-a</artifactId>
        </dependency>
        <dependency>
            <groupId>group-a</groupId>
            <artifactId>artifact-b</artifactId>
        </dependency>
    </dependencies>
</project>

这个不起作用:

<project>
    <dependencies>
        <dependency>
            <groupId>group-a</groupId>
            <artifactId>artifact-a</artifactId>
        </dependency>
        <dependency>
            <groupId>group-a</groupId>
            <artifactId>artifact-b</artifactId>
        </dependency>
    </dependencies>
</project>

这两者中唯一不同的似乎是:

<parent>
    <artifactId>artifact-parent</artifactId>
    <groupId>group-parent</groupId>
    <version>1.0-SNAPSHOT</version>
</parent>

第二个不起作用对我来说似乎不错,但我的问题是为什么第一个有效?

引自maven pom reference

  

此三位一体表示特定项目的时间坐标,   将其划分为该项目的依赖项。

所以我的问题是第一个是如何工作的?

1 个答案:

答案 0 :(得分:2)

这里需要注意的主要事项是:

<parent>
    <artifactId>artifact-parent</artifactId>
    <groupId>group-parent</groupId>
    <version>1.0-SNAPSHOT</version>
</parent>

依赖项的版本看起来像在父pom中定义。这可能是这样的:

<project>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>group-a</groupId>
                <artifactId>artifact-a</artifactId>
                <version>1.0</version>
            </dependency>
            <dependency>
                <groupId>group-a</groupId>
                <artifactId>artifact-b</artifactId>
                <version>1.0</version>
            </dependency>
        </dependencies>
    </dependencyManagement>
</project>

再次引用doc

  

This is because the minimal set of information for matching a dependency reference against a dependencyManagement section is actually {groupId, artifactId, type, classifier}

这里我们不需要定义{type, classifier},因为它与默认值相同,如下所示:

<type>jar</type>
<classifier><!-- no value --></classifier>

如果此值与默认值不同,则需要在父pom和子pom中明确定义它。