在我目前正在工作的项目中,我们在不同的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中。
答案 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/tags
和URL/project/branches
在我的模块中有条目,如..
,从我的角度来看是一个构建气味,表明你的文件夹结构与项目架构的关系有问题。