我有一个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
目录中获取它。
对不起,声誉寻求者,我又一次找到了我的问题的解决方案,而编写它。但是,如果有人遇到类似的问题,我可以继续把问题和答案贴出来。
问题原来是父pom.xml
在我的~/.m2/repository
目录设置location-service
依赖于${project.version}
。显然,这足以让maven-assembly-plugin
想要下载它,尽管在模块pom.xml
中显式依赖。这是maven-assembly-plugin:2.2-beta-5
中的一个bug。模块和父pom.xml
都没有显式命名maven-assembly-plugin
的版本。我不知道为什么maven选择2.2-beta-5
版本下载,因为它甚至不接近最新版本。mvn dependency:tree -Dverbose
甚至没有提到maven-assembly-plugin
。显式使用maven-assembly-plugin:2.5.5
解决了这个问题。