在 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."
我没有意识到这是可能的,但显然是因为我继承的这个项目做到了。该项目的 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."