如何告诉Maven在本地搜索父POM?

10

我在我的电脑上有许多以以下格式检出的Maven项目:

Translated: I have many Maven projects checked out on my machine in the following format:

my-project/
  pom.xml
my-other-project/
  pom.xml

my-other-project 声明 my-project 的 POM 文件作为其父级。问题是,my-project 还没有在 Maven 存储库中,这是两个独立的项目,因此 Maven 无法在本地搜索到父级 POM。有没有办法告诉 Maven 在搜索存储库之前查找 my-project/ 中的父级 POM?

运行 mvn package 时,我收到以下确切错误:

[INFO] Scanning for projects...
Downloading: https://repo.maven.apache.org/maven2/com/mycom/my-project/1.0.0/pom-base-1.0.0.pom
[ERROR] [ERROR] Some problems were encountered while processing the POMs:
[FATAL] Non-resolvable parent POM for com.mycom:my-other-project:1.0.0: Could not find artifact com.mycom:pom-base:pom:1.0.0 in central (https://repo.maven.apache.org/maven2) and 'parent.relativePath' points at wrong local POM @ line 39, column 11

编辑:

在父级声明中,可以设置<relativePath>../my-project</relativePath,但如果这可以自动发生会更好。


重点是Maven不能自动找到它。它应该在Maven能够找到的地方,即存储库或指定的本地路径中。当您更新版本或更改父级并且Maven无法找到它时,有时确实很令人烦恼。 - emjay
顺便说一下,将relativePath标签设置为空(<relativePath></relativePath>)会使Maven在仓库中查找父级。我知道这并不能解决问题,但它会让切换到仓库路径和切换回本地路径变得稍微容易一些! - emjay
2个回答

8
relativePath是一个很好的选择,如果您不希望将本地项目放在仓库中。 正如在参考文献中所述,这就是此元素的目的: 引用如下:
“在检出过程中父pom.xml文件的相对路径。 如果未指定,则默认为../pom.xml。 Maven首先在文件系统上查找此位置的父POM,然后在本地库中查找,最后在远程存储库中查找。 relativePath允许您选择不同的位置,例如当结构是平面或更深层次而没有中间父POM时。 但是,仍需要组ID、工件ID和版本,并且必须匹配给定位置的文件,否则它会恢复为POM的存储库。 此功能仅用于增强该项目的本地检出开发。 将值设置为空字符串以禁用该功能并始终从存储库解析父POM。”

5

您可以将my-project安装到本地的maven仓库中(默认位于~/.m2)。

要做到这一点,请进入my-project目录并使用mvn install命令。当此命令成功完成后,mvn package命令应该也会成功执行。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接