为什么 "mvn dependency:tree" 列出一个版本,但 "mvn clean install" 尝试下载另一个版本?

Why does "mvn dependency:tree" list one version, but "mvn clean install" try to download another version?

我有一个 Maven (3.2.5) 项目,由于缺少依赖项而失败。 mvn clean install 输出的相关部分:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-assembly-plugin:2.2-beta-5:single (package-jar-with-dependencies) on project splitter: Failed to create assembly: Failed to resolve dependencies for project: groupId1:splitter:jar:2.12.3: Missing:
[ERROR] ----------
[ERROR] 1) groupId2:location-service:jar:2.12.3

但是,mvn depdency:tree 声称不需要 2.12.3 版本:

[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ splitter ---
[INFO] groupId1:splitter:jar:2.12.3
[INFO] +- groupId2:location-service:jar:2.12.1:compile

没有列出其他 location-service 依赖项。

pom.xml 显式调出 2.12.1 依赖项:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd>
    <parent>
        <groupId>groupId2</groupId>
        <artifactId>artifactId</artifactId>
        <version>2.12.0</version>
    </parent>
    ...
    <groupId>groupId1</groupId>
    <artifactId>splitter</artifactId>
    <packaging>jar</packaging>
    <version>2.12.3</version>
    <name>splitter</name>
    <url>http://maven.apache.org</url>
    ...
    <dependencies>
        <dependency>
            <groupId>groupId2</groupId>
            <artifactId>location-service</artifactId>
            <version>2.12.1</version>
        </dependency>
        ...

有趣的是,父 pom.xml 在此目录结构中不可用(创建 SVN 分支的人分支了不包含父 pom.xml 的存储库的一部分)。然而,Maven 并没有抱怨它丢失了,所以它从我的~/.m2/repository 目录中获取它。

抱歉,寻求声誉的人,yet again 我在撰写问题时找到了问题的解决方案。但这已经足够复杂了,可以继续 post 问答,以防其他人遇到类似问题。

问题原来是我的 ~/.m2/repository 目录中的父 pom.xmllocation-service 依赖项设置为 ${project.version}。显然这足以让 maven-assembly-plugin 想要下载它,尽管在模块 pom.xml 中有明确的依赖性。这是 maven-assembly-plugin:2.2-beta-5 中的错误。模块和父 pom.xml 都没有命名 maven-assembly-plugin 的显式版本。我完全不知道为什么 Maven 选择 2.2-beta-5 版本下载,因为它甚至离最新版本还差得很远。 mvn dependency:tree -Dverbose 甚至没有提到 maven-assembly-plugin。显式使用 maven-assembly-plugin:2.5.5 解决了问题。