在 Maven 中,如何引用文件系统上该位置不存在的父 pom?

In maven, how can I refer to a parent pom that does not exist at that location on the file system?

我没有意识到这是可能的,但显然是因为我继承的这个项目做到了。该项目的 pom 如下所示:

<parent>
    <groupId>my.group</groupId>
    <artifactId>artifact</artifactId>
    <relativePath>../parent/pom.xml</relativePath>
    <version>1.0.14</version>
</parent>

“../parent/pom.xml”存在于我的文件系统中,但是这个项目构建没有问题。甚至 Intellij 也感到困惑,并将此 relativePath 标记为红色。

我知道这与我的 ~/.m2/settings.xml 配置方式有关,因为项目没有构建并抱怨缺少 pom.xml 直到我用的是公司的settings.xml。但我不确定它在那个文件中的什么位置使它起作用。

谁能给我指点一些描述此功能如何工作的文档?我们正在使用 Nexus maven 存储库。

当Maven寻找父POM时,它首先在<relativePath/>指定的地方寻找(默认是../pom.xml);如果在那里找不到它,它会去查找你的本地存储库 (~/.m2),然后尝试从远程存储库下载它。

没有看到您的 settings.xml 我无法确定,但我最好的猜测是您列出了一个远程存储库,使 maven 可以执行最后一步 - 从下载父 POM在 settings.xml.

中定义的远程存储库

参考:https://maven.apache.org/pom.html#Inheritance - "Notice the relativePath element. It is not required, but may be used as a signifier to Maven to first search the path given for this project's parent, before searching the local and then remote repositories."