考虑以下平面多模块布局的场景:
| parent-pom
| - pom.xml
| module1
| - pom.xml其中parent-pom/pom.xml是所有模块的父级POM:
<groupId>my-group</groupId>
<artifactId>parent-pom</artifactId>
<version>1.0.0</version>
...
...
<module>../module1</module>现在,pom.xml of module1包含以下parent部分:
<parent>
<groupId>my-group</groupId>
<artifactId>parent-pom</artifactId>
<version>1.0.0</version>
</parent>我从一个干净的本地存储库开始;没有一个工件是预先构建的,一切都是从零开始完成的。尝试在mvn install上执行parent-pom将导致一个错误,因为Maven反应堆将在本地存储库中查找my-group:base-pom,失败(因为它不在那里),然后查找../pom.xml。
很好。我的问题是:如果module1的构建是通过构建parent-pom来调用的,那么为什么Maven还要在任何地方查找父的pom.xml呢?当Maven开始构建module1时,它已经知道了以下几点:
my-group:parent-pom:1.0.0的物理位置。module1植根于my-group:parent-pom:1.0.0这一事实。为什么找别的地方?
发布于 2013-03-26 08:31:04
POM简介:项目继承:示例2告诉我们如下:
情景
但是,如果父项目已经安装在本地存储库中或位于特定的目录结构中(父pom.xml比模块的pom.xml高出一个目录),这将有效。
但是,如果尚未安装父目录结构,并且目录结构为
.
|-- my-module
| `-- pom.xml
`-- parent
`-- pom.xml解决方案
要解决这个目录结构(或任何其他目录结构),我们必须将<relativePath>元素添加到父部分。
<project>
<parent>
<groupId>com.mycompany.app</groupId>
<artifactId>my-app</artifactId>
<version>1</version>
<relativePath>../parent/pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>my-module</artifactId>
</project>顾名思义,它是从模块的relative path pom.xml到父pom.xml的pom.xml。
编辑:
getRelativePath告诉我们如下
获取签出中父pom.xml文件的相对路径。默认值是./po.xml。Maven首先在当前构建项目的反应堆中查找父pom,然后在文件系统上的这个位置查找父pom,然后在本地存储库中查找父pom,最后在远程回购中查找。relativePath允许您选择不同的位置,例如,当您的结构比较平坦时,或者在没有中间父pom的情况下,选择更深的位置,例如。但是,组ID、工件ID和版本仍然是必需的,并且必须与给定位置的文件匹配,否则它将恢复到POM的存储库。此特性仅用于增强该项目的本地签出中的开发。
我希望这能帮上忙。
https://stackoverflow.com/questions/15631827
复制相似问题