【问题标题】:Maven how set absolute path for parent pomMaven如何为父pom设置绝对路径
【发布时间】:2016-07-08 04:12:08
【问题描述】:

使用 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>

【问题讨论】:

  • 永远不要为父级使用绝对路径,只需删除 &lt;relativePath&gt;...&lt;/relativePath&gt; 元素。在你的父母上创建一个mvn install,它可以从你的本地仓库中获得,这意味着你不再需要定义 relativePath ......

标签: maven path maven-3 parent absolute


【解决方案1】:

你不能为你的父 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 操作之前,为任何新版本预先设置父项目。

【讨论】:

  • 如何“在构建时注入”?
  • @luckyging3r 在这种情况下,它意味着从命令行指定目标或阶段时,您可以通过作为构建属性注入另一个值,即使用动态值
猜你喜欢
  • 2012-02-23
  • 1970-01-01
  • 2013-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-29
  • 1970-01-01
  • 2015-06-06
相关资源
最近更新 更多