使用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>
答案 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操作之前,任何新版本的父项目。