将模块添加到具有不同相对路径的maven多模块项目中

时间:2014-07-07 21:22:53

标签: java eclipse maven svn

在我目前正在工作的项目中,我们在不同的SVN目录中有不同的maven项目,如下所示:

(simplified)
...service/rest-api/trunk/project1
...service/common/trunk/project2
...service/common/trunk/parent-aggregator

最后一个(父聚合器)是一个maven pom项目,它包含共享依赖项和多模块配置。

因此,当我使用Eclipse svn(subclipse)客户端时,它允许我将所有这些项目导入到我的eclipse工作区中,将所有项目都放在同一目录中,因此我创建的配置可以使用相对路径:

parent-aggregator pom.xml:

<modules>
    <module>../project1</module>
    <module>../project2</module>
</modules>

当我的一位同事使用tortoise svn客户端获得项目然后将项目导入eclipse时,问题出现了,tortoise正在复制他本地文件系统中的svn目录结构。

因此,每当他尝试对父聚合器执行mvn clean安装时,由于project1无法访问,它都会失败。这在他的机器中是有意义的,项目不在同一目录中。

有没有办法引用模块,所以两种结构都可以工作?

我到目前为止尝试使用artifactId:

<module>artifactId</module>

它不起作用。

还尝试添加项目名称,首先定义:

<name>project1</name>

在project1 pom.xml中

然后在模块中引用它:

<module>project1</module>

但它一直告诉我它无法找到子模块。

我们使用的临时解决方案是在本地计算机中使用不同的相对路径:

<modules>
    <module>../../../rest-api/trunk/project1</module>
    <module>../project2</module>
</modules>

我根本不喜欢,因为我们应该有一种方法可以保留在SVN中。

1 个答案:

答案 0 :(得分:0)

你应该做的第一件事就是改变你的结构以及SVN ..因为如果你有多模块构建你表示那些模块属于thegehter所以你应该代表你的结构。

+--- root (pom.xml)
       +--- mod-rest-api (pom.xml)
       +--- mod-war (pom.xml)
       +--- mod-p1 (pom.xml)

如果您根据上述内容更改项目,则只有以下条目:

<modules>
  <module>mod-rest-api</module>
  <module>mod-war</module>
  <module>mod-p1</module>
</modules>

这将简化您的输入,您不需要为父母提供relativePath条目。 此外,你也可以在SVN中使用结构:

URL/project/trunk
     +--- root (pom.xml)
         +--- mod-rest-api (pom.xml)
         +--- mod-war (pom.xml)
         +--- mod-p1 (pom.xml)

所以你有URL/project/tagsURL/project/branches

在我的模块中有条目,如..,从我的角度来看是一个构建气味,表明你的文件夹结构与项目架构的关系有问题。