我们已经将所有依赖项放到了两个单独的 pom 文件中,这些文件带有 dependencyManagement 部分。要求是允许构建具有快照依赖项的模块并使用发布版本发布。这两个 pom 文件(X和Y) 包含所有模块的所有允许的快照版本和所有模块的所有发布版本。因此,模块 pom 文件有一个 dependencyManagement 部分,用于导入具有发布依赖项的 pom 文件,以及一个用于构建的配置文件,该配置文件包含一个 dependencyManagement 部分,该部分导入具有快照依赖项的 pom 文件。但问题是,从配置文件中的依赖管理部分导入的依赖项在构建时没有得到解决(即使配置文件处于活动状态)。如果我们删除配置文件之外的dependencyManagement 部分(带有发布版本的部分),这些都会得到解决。这是预期的行为吗?如果是这样,为什么?或者这是maven中的错误?在 Maven 2 和 3 中测试。
以下示例 pom 文件显示了该问题。
X计划
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>maven</groupId>
<artifactId>X</artifactId>
<packaging>pom</packaging>
<name>X</name>
<version>1.0</version>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>test</groupId>
<artifactId>a</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>test</groupId>
<artifactId>b</artifactId>
<version>1.0</version>
<scope>compile</scope>
</dependency>
</dependencies>
</dependencyManagement>
</project>
Y项目
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>maven</groupId>
<artifactId>Y</artifactId>
<packaging>pom</packaging>
<name>Y</name>
<version>1.0-SNAPSHOT</version>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>test</groupId>
<artifactId>a</artifactId>
<version>1.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>test</groupId>
<artifactId>b</artifactId>
<version>1.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>test</groupId>
<artifactId>c</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
</dependencies>
</dependencyManagement>
</project>
Z项目
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>maven</groupId>
<artifactId>Z</artifactId>
<packaging>pom</packaging>
<name>Z</name>
<version>1.0</version>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>maven</groupId>
<artifactId>X</artifactId>
<version>1.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<profiles>
<profile>
<id>non-release</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<build>true</build>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>maven</groupId>
<artifactId>Y</artifactId>
<version>1.0-SNAPSHOT</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
</profile>
</profiles>
</project>
mvn help:active-profiles返回非发布。但是 mvn help:effective-pom 返回test:a:1.0, test:b:1.0, test:c:1.0-SNAPSHOT
我也想获得a和b的快照版本。
知道为什么会这样吗?如果这是因为它得到解决的顺序,我怎样才能克服它在构建时解决快照依赖关系而不提及配置文件并在发布时解决发布版本?