如何告诉Maven在哪里搜索父POM?

时间:2015-06-07 12:04:48

标签: java maven

我在我的机器上检出了许多Maven 项目,格式如下:

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,但如果这可能会自动发生会很好。

2 个答案:

答案 0 :(得分:4)

如果您不想在回购中拥有本地项目,那么

relativePath就是您的选择。这就是这个元素的用途,如reference documentation中所述:

  

签出中父pom.xml文件的相对路径。如果未指定,则默认为../pom.xml。 Maven首先在文件系统上的这个位置查找父POM,然后是本地存储库,最后在远程仓库中查找。 relativePath允许您选择不同的位置,例如,当您的结构是平的时,或者更深,没有中间父POM。但是,组ID,工件ID和版本仍然是必需的,并且必须与给定位置中的文件匹配,否则它将恢复为POM的存储库。 此功能仅用于增强该项目本地签出的开发。如果要禁用该功能并始终从存储库中解析父POM,请将该值设置为空字符串。

答案 1 :(得分:3)

您可以在本地maven存储库中安装my-project(默认情况下位于~/.m2)。

要执行此操作,请转至my-project目录并使用mvn install命令。当此命令成功完成时,mvn package命令应该成功。