В проекте, в котором я сейчас работаю, мы имеем разные проекты maven в разных каталогах SVN, примерно так:
(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>
Проблема возникла, когда один из моих коллег получил проекты с использованием клиента черепахи svn, а затем импортировал проекты для затмения, черепаха реплицирует структуру каталогов svn в своей локальной файловой системе.
Поэтому всякий раз, когда он пытается выполнить чистую установку mvn в родительский агрегатор, он терпит неудачу из-за невозможности достижения проекта1. Что имеет смысл, так как в его машине проекты находятся не в одном каталоге.
Есть ли способ ссылаться на модули, чтобы обе структуры могли работать?
Я до сих пор пытался использовать artifactId:
<module>artifactId</module>
он не работает.
Также попробовал добавить название проекта, сначала определив:
<name>project1</name>
внутри проекта1 pom.xml
И затем ссылаясь на него в модуле:
<module>project1</module>
Но он продолжает говорить мне, что он не может найти дочерний модуль.
Временное решение, которое мы используем, имеет другой относительный путь на его локальной машине:
<modules>
<module>../../../rest-api/trunk/project1</module>
<module>../project2</module>
</modules>
Что мне совсем не нравится, поскольку у нас должен быть один подход, который мы можем сохранить в SVN.
Первое, что вам нужно сделать, это изменить вашу структуру, а также в SVN. Потому что, если у вас есть многомодульная сборка, вы выражаете, что эти модули принадлежат togehter, поэтому вы должны представлять в своей структуре.
+--- 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
Наличие записей в ваших модулях, таких как ..
, с моей точки зрения, запах сборки, который указывает, что что-то не так с вашей структурой папок в связи с архитектурой проекта.