如何在儿童模块pom中获得超级pom基础?

Jer*_*nce 14 maven-2 maven

我想在我的maven项目中定义一个本地存储库.

我有一个超级pom和几个子模块.我的文件结构是:

/root
    /repository
    /child
        pom.xml
    pom.xml
Run Code Online (Sandbox Code Playgroud)

在我的超级pom我定义:

<repository>
    <id>my-local-repo</id>
    <url>file://${basedir}/repository</url>
</repository>
Run Code Online (Sandbox Code Playgroud)

问题是在我的孩子pom中,我的超级pom中定义的存储库引用/ root/child/repository,因此无法找到依赖项...

有没有办法定义一条始终相对于超级pom的路径?

如果没有,解决问题的最佳方法是什么?

Ric*_*doS 5

在这种情况下,首先您可以尝试 ${project.parent.basedir}.
由于它似乎不起作用,简单(和本机)方法是使用完整路径(/root/...)或尝试使用相对路径(../)而不是使用 ${basedir} 变量。

但对我来说,一个很好的解决方案是将此配置外部化为一个属性文件。
您可以使用properties-maven-plugin ( http://mojo.codehaus.org/properties-maven-plugin/plugin-info.html )。

使用这个插件,可以像 pom.xml 中定义的属性一样读取属性文件中定义的属性。

从插件站点:

如果您有一个名为 team.properties 的属性文件,其中包含以下内容:

toronto=raptors
miami=heat
Run Code Online (Sandbox Code Playgroud)

与在 pom.xml 中声明以下内容相同:

<properties> 
  <toronto>raptors</toronto>
  <miami>heat</miami>
</properties>
Run Code Online (Sandbox Code Playgroud)


Cor*_*bba 3

${project.parent.basedir}应该做这项工作。

或者您可以在属性中设置根的 basedir-path,这样它将被继承。父级中有类似的东西

<properties>
  <rootPath>${basedir}</rootPath>
</properties>
Run Code Online (Sandbox Code Playgroud)

而在孩子身上

<repository>
  <id>my-local-repo</id>
  <url>file://${rootPath}/repository</url>
</repository>
Run Code Online (Sandbox Code Playgroud)

  • 感谢您的回复,但父 pom 中的 ${basedir} 不会运行,因为它被子 pom 路径替换,并且 ${project.parent.basedir} 从未被解释 (4认同)
  • 真的。属性首先从父级合并,然后进行处理。 (3认同)