基于绝对路径值更新Maven relativePath

时间:2013-12-25 10:08:20

标签: maven

我的机器中有这样的目录结构:

MyProjects
|
+-- MainProject
|   |
|   +-- pom.xml
|
+-- AdditionProjects
    |
    +-- AdditionProject1
        |
        +-- pom.xml

我将这些代码写入AdditionProject1/pom.xml

<parent>
    <relativePath>../../MainProject/pom.xml</relativePath>
    <groupId>com.example</groupId>
    <artifactId>add_project_1</artifactId>
    <version>1.0.0-SNAPSHOT</version>
</parent>

但是当我在构建机器上运行此代码时,我有一些不同的目录结构:

SomeBuildProjects
|
+-- MainProject
|   |
|   +-- pom.xml
|
+-- AdditionProject1
    |
    +-- pom.xml

我需要将相对路径../../MainProject/pom.xml替换为../MainProject/pom.xml

在构建计算机中,我的属性包含MainProjectAdditionProject1的绝对路径。

如何使用Maven从绝对路径获取相对路径?

例如,在Ant中,我可以将JavaScript代码写入<script></script>并处理属性值。 也许Maven有同样的东西?

也许我可以在<parent></parent>中使用绝对路径代替相对路径?

1 个答案:

答案 0 :(得分:2)

我建议为项目使用以下布局:

MyProjects (pom.xml)
|
+-- MainProject
|   |
|   +-- pom.xml
|
+-- AdditionProjects (pom.xml)
    |
    +-- AdditionProject1
        |
        +-- pom.xml

通过使用此布局,您必须在根文件夹上提供以下内容:

<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>WhatEvery</groupId>
  <artifactId>root</artifactId>
  <version>1.0-SNAPSHOT</version>

  <packaging>pom</packaging>

  <modules>
   <module>MainProject</module>
   <module>AdditionProjects</module>
  </modules>
</project>

在子模块中,您可以像这样使用父:

<project>
  <modelVersion>4.0.0</modelVersion>

  <parent>
    <groupId>WhatEvery</groupId>
    <artifactId>root</artifactId>
    <version>1.0-SNAPSHOT</version>
  </parent>
  <artifactId>MainProject</artifactId>
  ...    
</project>

最后是AdditionProjects:

<project>
  <modelVersion>4.0.0</modelVersion>

  <parent>
    <groupId>WhatEvery</groupId>
    <artifactId>root</artifactId>
    <version>1.0-SNAPSHOT</version>
  </parent>

  <artifactId>AdditionProjects</artifactId>

  <packaging>pom</packaging>

  <modules>
   <module>AdditionProject1</module>
  </modules>

  ...    
</project>

在AdditionProject1项目中,您的pom中包含以下内容:

<project>
  <modelVersion>4.0.0</modelVersion>

  <parent>
    <groupId>WhatEvery</groupId>
    <artifactId>AdditionProjects</artifactId>
    <version>1.0-SNAPSHOT</version>
  </parent>
  <artifactId>AdditionProject1</artifactId>
  ...    
</project>

通过使用正确的结构,当然应该检入版本控制,就像你不需要设置relativePath元素一样,当然也可以使你的pom更简单。除此之外,如果您已将其签入到版本控制中,那么构建服务器是否检出相同的结构并不重要。你不需要改变任何东西。