我遇到了一个奇怪的Maven配置问题,这是我以前从未遇到过的,并且对我的解决方案感到困惑。为什么我需要在我的settings.xml文件中指定一个存储库
我有一个本地的Nexus服务器,我用它来作为一切的镜像。到现在为止,我只有以下镜子在我的settings.xml文件:
<mirrors>
<mirror>
<id>nexus</id>
<mirrorOf>*</mirrorOf>
<name>WADA Nexus</name>
<url>https://nexus.domain.org/repository/Public/</url>
</mirror>
</mirrors>
然而,最近我想创造我已经部署到我的Nexus回购自己的定制父POM。在我的项目,我已经指出了我的父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>
自从我镜像所有回购/网址,我可以在URL设置为任意值,现在Maven会拿起我的父母。
那么,为什么我甚至需要指定存储库呢? Maven是否应该自动尝试解决maven central或其他默认存储库中的父pom?
请显示您的pom文件...它不会解决Maven Central因为您已配置为mirrorOf所有条目到您的内部存储库管理器是正确的。 – khmarbaise
@khmarbaise我意识到它不会真正到达maven中心,但我期待它尝试,然后由于镜像设置而重定向到我的连接点。 pom文件非常基本 - 除了父定义之外,它还有一些属性,依赖关系定义和几个插件定义。没有存储库或分发管理条目。 –
@khmarbaise一旦我坐下来思考这一点,我得出的结论是,如果我没有明确指定SNAPSHOT存储库,maven不知道该去哪里查找SNAPSHOT构件。这是设计吗?是否没有默认回购(如maven中心)的快照文物? –