【发布时间】:2017-04-12 03:06:49
【问题描述】:
我遇到了一个以前从未遇到过的奇怪的 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 吗?
【问题讨论】:
-
请出示您的 pom 文件...它不会针对 Maven Central 解决,因为您已配置为将所有条目镜像到您的内部存储库管理器,这是正确的。
-
@khmarbaise 我意识到它实际上不会到达 maven Central,但我希望它会尝试然后由于镜像设置而被重定向到我的关系。 pom 文件非常基础——除了父定义之外,它还有一些属性、依赖定义和几个插件定义。没有存储库或分发管理条目。
-
@khmarbaise 一旦我坐下来仔细考虑这个问题,我得出的结论是,如果我没有明确指定 SNAPSHOT 存储库,maven 不知道去哪里寻找 SNAPSHOT 工件。这是设计使然吗?快照工件是否没有默认存储库(如 maven Central)?