Добавить модули в многомодульный проект Maven с разными относительными путями

1

В проекте, в котором я сейчас работаю, мы имеем разные проекты 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.

Теги:
maven
svn

1 ответ

0

Первое, что вам нужно сделать, это изменить вашу структуру, а также в 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

Наличие записей в ваших модулях, таких как .., с моей точки зрения, запах сборки, который указывает, что что-то не так с вашей структурой папок в связи с архитектурой проекта.

  • 0
    Что ж, изменение структуры - очевидное решение, но я не могу это контролировать, потому что это было решено априори, и есть другие не maven проекты из других команд, поэтому я не могу изменить структуру и повлиять на них только потому, что maven не способен на большее расширенный справочник.
  • 0
    Что вы подразумеваете под продвинутыми ссылками? Похоже, вы используете Maven неправильно ... Если вы не можете изменить структуру, вы не должны использовать многомодульную сборку или агрегаторы. Лучше использовать зависимости по умолчанию.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню