我遇到了一个从未遇到过的奇怪的Maven配置问题,并对解决方案感到困惑。
我有一个本地Nexus服务器,可以用作所有内容的镜像。到目前为止,我的settings.xml文件中只有以下镜像:
<mirrors>
<mirror>
<id>nexus</id>
<mirrorOf>*</mirrorOf>
<name>WADA Nexus</name>
<url>https://nexus.domain.org/repository/Public/</url>
</mirror>
</mirrors>
但是,我最近想创建自己的自定义父pom,并将其部署到Nexus存储库中。在我的项目中,我已指向我的父pom:
<parent>
<groupId>org.domain</groupId>
<artifactId>root-pom</artifactId>
<version>1.0.0-SNAPSHOT</version>
</parent>
但是,当我现在尝试运行我的构建时,它失败并显示以下内容:
ERROR: Failed to parse POMs
org.apache.maven.project.ProjectBuildingException: Some problems were encountered while processing the POMs:
[FATAL] Non-resolvable parent POM: Could not find artifact org.domain:root-pom:pom:1.0.0-SNAPSHOT and 'parent.relativePath' points at wrong local POM @ line 9, column 10
由于某些原因,maven并未尝试在Nexus存储库中查找父pom。
我唯一的解决方法是在settings.xml文件中定义一个随机存储库值:
<repositories>
<repository>
<id>nexus</id>
<releases>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
<checksumPolicy>warn</checksumPolicy>
</releases>
<snapshots>
<enabled>true</enabled>
<updatePolicy>never</updatePolicy>
<checksumPolicy>fail</checksumPolicy>
</snapshots>
<url>https://www.google.com/anythingCanGoHere</url>
<layout>default</layout>
</repository>
</repositories>
由于我已经镜像了所有Repos / URL,因此可以将该URL设置为任何值,并且maven现在将获取我的父pom。
那么,为什么我什至根本不需要指定存储库?Maven是否不应该自动尝试针对Maven Central或其他默认存储库来解析父pom?
这不是一个奇怪的配置问题,而仅仅是您的误解。您要做的是填充<distributionManagement/>
父POM,并在settings.xml
本地Nexus实例中添加一个万能的镜像,并希望它能正常工作。
您实际上知道您正在镜像吗?没有!Maven中的默认硬编码存储库是Maven Central。这是一个不包含任何快照的版本库。因此,您会看到ERROR
。为了使Maven能够从您的Nexus实例请求快照,必须使用伪造的仓库,否则它将仅请求发布。Nexus依次拥有一个包含Central的存储库组以及您托管的版本和快照存储库。
只要您没有在POM中定义任何快照存储库(您不应该这样做),Maven就永远无法下载任何快照。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句