Maven如何设置父pom的绝对路径

时间:2016-03-21 15:06:08

标签: maven path maven-3 parent absolute

使用maven 3我有一个父项目在' C:/ travail / parent'。 我有几个儿童项目,由于各种原因,可以改变位置。 要进行战争,必须设置relativePath标记。

<parent>
    <groupId>framework.parent</groupId>
    <artifactId>parent</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <relativePath>C:/Travail/parent/pom.xml</relativePath>
</parent>

问题:如何为父级设置绝对路径?以下不起作用。

<relativePath>/C:/Travail/parent/pom.xml</relativePath>

1 个答案:

答案 0 :(得分:5)

您不能为父pom使用绝对路径,配置条目的名称本身是非常自我解释的(相对路径)。

来自此元素的官方Maven model documentation

  

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

你甚至不能使用快捷方式或符号链接,与每个模块一起分发并指向绝对文件位置,它不起作用(你不应该使用这样的无论如何,即使它会发挥作用)。

您甚至无法使用属性作为relativePath元素的值占位符。类似的东西:

<parent>
    <groupId>framework.parent</groupId>
    <artifactId>parent</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <relativePath>${path.to.parent}</relativePath>
</parent>

尝试在构建时注入它,如:

mvn clean install -Dpath.to.parent=C:/somewhere/pom.xml

根本不起作用,以下Maven门票记录:

正如官方文档中所提到的,此配置条目的唯一合理用例是平面结构化多模块项目,其中模块和父项目位于同一目录级别。

否则,更适合您的用例,您应该将父pom作为共享Maven存储库的一部分(如果有)提供,或者需要maven install(以便它可以在本地maven缓存中使用) )在对子/模块项目执行任何所需的maven操作之前,任何新版本的父项目。