不幸的是,我无法确定是什么原因造成的,但在更新我的项目后,主项目中找不到其中一个依赖项。我不知道为什么只有这个会导致问题,而其他的都不会。mvn -U clean package
输出如下:
...
Downloading: http://172.22.1.123:8080/repository/my-snapshots/
com/company/mypkg/dep1/1.4-SNAPSHOT/maven-metadata.xml
Downloaded: http://172.22.1.123:8080/repository/my-snapshots/
com/company/mypkg/dep1/1.4-SNAPSHOT/maven-metadata.xml (993 B at 97.0 KB/sec)
Downloading: http://172.22.1.123:8080/repository/my-snapshots/
com/company/mypkg/dep2/1.7-SNAPSHOT/maven-metadata.xml
Downloaded: http://172.22.1.123:8080/repository/my-snapshots/
com/company/mypkg/dep1/1.7-SNAPSHOT/maven-metadata.xml (993 B at 97.0 KB/sec)
Downloading: http://172.22.1.123:8080/repository/my-snapshots/
com/company/mypkg/dep3/1.2-SNAPSHOT/dep3-1.2-SNAPSHOT.jar
...
[ERROR] Failed to execute goal on project e-backend-impl:
Could not resolve dependencies for project
com.company:dep3:jar:1.2-SNAPSHOT: Could not find artifact
com.company:dep3:jar:1.2-SNAPSHOT in com.company.snapshot.repo
(http://172.22.1.123:8080/repository/my-snapshots) -> [Help 1]
Maven的settings.xml的快照仓库配置如下:
<repository>
<id>com.company.snapshot.repo</id>
<name>Company's snapshot repository</name>
<url>http://172.22.1.123:8080/repository/my-snapshots</url>
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
</snapshots>
<releases>
<enabled>false</enabled>
</releases>
</repository>
我尝试过但没有帮助的事情:
- 在本地存储库中安装了 dep3。
- 设置
updatePolicy
为每日或从不 mvn -o
本地安装 dep3 后- 删除本地存储库中的 dep3 快照目录
Maven 版本是 3.3.9,Nexus 版本是 3.12.0。我能想到的一个提示是,对于 dep3,mvn 不会先尝试下载 maven-metadata.xml,而是直接下载 dep3-1.2-SNAPSHOT.jar,而 Nexus 上不存在这个文件,因为实际的库名称中有一个时间戳。但我不知道为什么会发生这种情况,而且只发生在 dep3 上,而不发生在 dep2 和 dep1 上。mvn 为什么会忽略本地部署的快照也是一个谜。
任何帮助将不胜感激。
编辑:
确定了 Nexus 的一个问题,该问题很可能是导致该问题的原因。maven-metadata.xml
项目的主要内容(不是快照)未将部署的快照版本标记为最新版本。它看起来像这样:
<metadata>
<groupId>com.company.mypkg</groupId>
<artifactId>dep3</artifactId>
<versioning>
<latest>1.1-SNAPSHOT</latest>
<versions>
<version>1.0-SNAPSHOT</version>
<version>1.1-SNAPSHOT</version>
<version>1.2-SNAPSHOT</version>
<versions>
<lastUpdated>20190502080656</lastUpdated>
</versioning>
</metadata>
最终这也是为什么本地快照也没有被考虑的原因。现在的问题是,这种情况是怎么发生的。我也再次部署到了 Nexus,但标签latest
仍然显示较旧的快照版本。
编辑2:
所以它又能正常工作了,但我不知道为什么。我做了什么:从我们的 CI 再次将 dep3 部署到 Nexus。然后,在 dep3 目录中:
mvn -U -DupdateReleaseInfo clean install
看看本地存储库中的 release 标签发生了什么(显然什么也没发生)。然后主项目工作正常。我删除了本地存储库中的 dep3 目录,它仍然工作正常。Nexus 中的 maven-metadata.xml 仍然没有改变(latest
标签指向旧版本)。所以就是这样不是问题。
它说该latest
字段仅用于部署 maven 插件,这毫无意义,因为 dep3 绝对不是 maven 插件。但是这篇文章很旧了。