在 Maven 中,我可以在当前项目上方指定相对路径吗?

Posted

技术标签:

【中文标题】在 Maven 中,我可以在当前项目上方指定相对路径吗?【英文标题】:In Maven, can I specify a relative path above my current project? 【发布时间】:2011-01-11 01:30:06 【问题描述】:

我在处理一个需要构建大量项目的项目时,正在快速学习 maven。

当前主构建中的一行使用绝对路径来指定一个目录,该目录是 subversion 存储库的一部分,但“高于”它的目录。

如:“C:/work/project/eclipse”,其中“project”是签入目录,pom.xml 在“C:/work/project/src/subproject/pom.xml”中

我想将该行改为相对地址。

我尝试指定“../../Eclipse....”,但似乎不起作用。

也可能是因为子项目的 pom 文件正在使用相同的变量。

任何建议(除了重写整个混乱,我对 maven 的了解还不够多)?

【问题讨论】:

【参考方案1】:

对于 Maven,事物相对于包含 pom.xml 的目录(由 $basedir 属性表示,称为基本目录)。然而,在某些情况下,您可能必须指定相对路径:

如果<parent> pom 不直接位于使用<relativePath> 元素的给定模块上方(请参阅this example) 如果模块没有嵌套(即,如果您使用平面布局),则在各种 <module> 元素中使用相对路径(如在 this example 中)。

说了这么多,我不确定你的情况到底是什么或你在描述什么。

如果可能的话,也许你应该展示你的 POM 的相关部分。

【讨论】:

你说things are relative to the directory containing the pom.xml,但不应该是things are relative to the directory containing the pom.xml being built吗?因为例如(也许我错了)如果你在父模块的某个地方使用像$project.basedir这样的变量然后您构建子模块,$project.basedir 成为子目录,而不是父目录,因此变量的使用实际上与父的 pom.xml 无关 我可以将变量传递给<relativePath> 吗?例如:<relativePath>$parentPath</relativePath>where 我的parentPath 变量是在properties 标签内定义的? @JaimeHablutzel 你能提供一个答案吗? ../my-module【参考方案2】:

理想情况下,pom.xml 应与您的 src 目录位于同一目录中。例如,假设您已将项目从 svn 检出到文件夹 C:/work/project,然后将主 pom.xml 保留在 C:/work/project 中。 src 也应该在 C:/work/project 中。

您的其他子项目应位于C:/work/subproject1C:/work/subproject2 等,每个子项目都有自己的pom.xml。然后在主pom.xml可以参考其他项目中的

<modules>      
    <module>../subproject1<module>
    <module>../subproject2<module>
</modules>

【讨论】:

以上是关于在 Maven 中,我可以在当前项目上方指定相对路径吗?的主要内容,如果未能解决你的问题,请参考以下文章

wsdlLocation可以写成项目的相对路劲吗

Maven教程2(Eclipse配置及maven项目)

maven项目 导出相关依赖包到指定文件夹

sonar-maven-plugin:如何在包含模式中使用项目相对路径?

更改IDEA相对路径

Gradle相对于Maven的优势