Java 向具有不同相对路径的maven多模块项目添加模块
在我目前正在工作的项目中,我们在不同的SVN目录中有不同的maven项目,如下所示:Java 向具有不同相对路径的maven多模块项目添加模块,java,eclipse,maven,svn,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)客户端时,它允许我将所有这些
(simplified)
...service/rest-api/trunk/project1
...service/common/trunk/project2
...service/common/trunk/parent-aggregator
最后一个(父聚合器)是一个maven pom项目,它包含共享依赖项和多模块配置
因此,当我使用Eclipse svn(subclipse)客户端时,它允许我将所有这些项目导入我的Eclipse工作区,使所有项目位于同一目录中,因此我创建的配置可以使用相对路径:
父聚合器pom.xml:
<modules>
<module>../project1</module>
<module>../project2</module>
</modules>
../project1
../project2
当我的一位同事使用tortoise svn客户端获得项目,然后将项目导入eclipse时,问题出现了。tortoise正在本地文件系统中复制svn目录结构
因此,每当他尝试对父聚合器进行mvn清理安装时,由于无法访问project1,聚合器就会失败。这很有意义,因为在他的机器中,项目不在同一目录中
是否有方法引用模块,以便两种结构都能工作
到目前为止,我尝试使用artifactId:
<module>artifactId</module>
artifactId
它不起作用
还尝试添加项目名称,方法是首先定义:
<name>project1</name>
project1
在project1 pom.xml内部
然后在模块中引用它:
<module>project1</module>
project1
但它一直告诉我它找不到子模块
我们使用的临时解决方案是在其本地计算机中具有不同的相对路径:
<modules>
<module>../../../rest-api/trunk/project1</module>
<module>../project2</module>
</modules>
../../../rest api/trunk/project1
../project2
我一点也不喜欢,因为我们应该有一个单一的方法,我们可以保留在SVN中。您应该做的第一件事是改变您的结构以及SVN。因为如果您有多模块构建,您表示这些模块属于同一个模块,因此您应该在您的结构中表示
+--- root (pom.xml)
+--- mod-rest-api (pom.xml)
+--- mod-war (pom.xml)
+--- mod-p1 (pom.xml)
如果您根据上述内容更改项目,则只有以下条目:
(simplified)
...service/rest-api/trunk/project1
...service/common/trunk/project2
...service/common/trunk/parent-aggregator
modrestapi
现代战争
mod-p1
这将简化您的条目,您不需要为您的父母设置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/branchs
在你的模块中有类似于
的条目。
在我看来是一种构建气味,表明你的文件夹结构与项目架构的关系有问题。好吧,改变结构是一个明显的解决方案,但这是我无法控制的,因为这是事先决定的,而且其他团队还有其他非maven项目,所以我不能仅仅因为maven不能进行更高级的参考而改变结构并影响他们。你说的高级参考是什么意思?听起来你使用Maven的方式不对……如果你不能改变结构,就不应该使用多模块构建器或聚合器。更好地使用默认依赖项。我所说的高级引用是一种更通用的模块引用方式,我们不应该仅仅因为本例中的一个构建工具Maven不喜欢,就被迫构建可以包含不同技术的不同源代码和配置项的整个组织存储库。@khmarbaise,我正在学习
,我看到它也接受/artifactId
和artifactId
。它甚至接受/artifactId/pom.xml
。为什么?