如何在没有版本标签的情况下定义 Maven 依赖项?
How a maven dependecy can be defined without version tag?
我有一个没有在 pom 中定义依赖版本的 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>
第二个不起作用,我觉得很好,但我的问题是为什么第一个起作用?
This trinity represents the coordinate of a specific project in time,
demarcating it as a dependency of this project.
所以我的问题是第一个是如何工作的?
这里主要要注意的是:
<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 中明确定义它。
我有一个没有在 pom 中定义依赖版本的 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>
第二个不起作用,我觉得很好,但我的问题是为什么第一个起作用?
This trinity represents the coordinate of a specific project in time, demarcating it as a dependency of this project.
所以我的问题是第一个是如何工作的?
这里主要要注意的是:
<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 中明确定义它。