我没有意识到这是可能的,但显然是因为我继承的这个项目做到了。该项目的 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 可以执行最后一步 - 从 settings.xml 中定义的远程存储库下载父 POM。
引用:https://maven.apache.org/pom.html#Inheritance - “注意 relativePath
元素。它不是必需的,但可以用作 Maven 的标志,以便在搜索本地和远程存储库之前首先搜索为此项目的父级指定的路径。”
关于java - 在 Maven 中,如何引用文件系统上该位置不存在的父 pom?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28054211/