我的机器中有这样的目录结构:
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
。
在构建计算机中,我的属性包含MainProject
和AdditionProject1
的绝对路径。
如何使用Maven从绝对路径获取相对路径?
例如,在Ant中,我可以将JavaScript
代码写入<script></script>
并处理属性值。 也许Maven有同样的东西?
也许我可以在<parent></parent>
中使用绝对路径代替相对路径?
答案 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更简单。除此之外,如果您已将其签入到版本控制中,那么构建服务器是否检出相同的结构并不重要。你不需要改变任何东西。