我在我的机器上检出了许多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
,但如果这可能会自动发生会很好。
答案 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
命令应该成功。