работа над ошибкой maven: проект 'XYZ' дублируется в реакторе

Я создаю многомодульный проект, в который входит множество других связанных проектов. Некоторые из этих проектов также являются многомодульными, а в некоторых случаях они создают один и тот же подпроект. Мавен кричит на меня, но это сделано намеренно, и я бы все равно хотел, чтобы он был построен.

Кто-нибудь работал над этим? Спасибо.

Ответов (5)

Решение

Я не думаю, что тебе следует это делать. (Вы можете попробовать определить профиль - скажем, профиль полной сборки, где вы убедитесь, что каждый модуль скомпилирован только один раз, другой профиль, который добавляет дополнительные модули, когда вы выполняете вспомогательную сборку.)

Но вам лучше пойти по пути maven - каждый проект должен включать в качестве модулей только каталоги из своего собственного каталога, например, только прямые дочерние элементы.

В Maven есть некоторые не записанные неявные предположения, такие как - всегда наследовать подмодули из pom в родительском каталоге, например, дерево наследования должно соответствовать дереву вашего каталога, иначе некоторые плагины не будут работать, например, релизный плагин или некоторые плагины отчетов.

Короткий ответ - в maven вы не можете иметь модуль дважды в иерархии / дереве вашего проекта.

В maven много неправильных способов, поэтому нужно придерживаться того, что, как известно, работает - например, иерархия pom == структура каталогов.

Похоже, что «один и тот же подпроект», который вы можете построить из нескольких проектов, является зависимостью для всех этих проектов. Переместите его на более высокий уровень в дереве каталогов и объявите его как зависимость во всех помах проекта, которые в нем нуждаются. Он будет построен первым созданным вами проектом, которому он нужен, а остальные увидят, что вы «были там, сделали это», и пропустят его.

Для меня <artifactId> было то же самое для двух разных модулей в их помпе, и это вызвало эту ошибку.
После изменения все работало нормально.

Вы пробовали один из этих параметров командной строки?

-fae,--fail-at-end            Only fail the build afterwards; allow all
                              non-impacted builds to continue
-fn,--fail-never              NEVER fail the build, regardless of project
                              result

Это происходит, когда у вас есть такая структура:

+-- root-project-A
    `-- pom.xml
    +-- module-A
    |   `-- pom.xml
    +-- module-B
    |   `-- pom.xml
    +-- root-project-B
        `-- pom.xml
        +-- module-C
            `-- pom.xml

И настройте свои модули так:

|-- root-project-A
    `-- pom.xml
        <modules>
         <module>module-A</module>
         <module>module-B</module>
         <module>root-project-B</module> <!-- Error: project A reference project B -->
         <module>root-project-B/module-C</module> <!-- Error: project A reference project B -->
        </modules>

|-- root-project-B
    `-- pom.xml
        <modules>
         <module>module-C</module>
        </modules>

Проект A не может ссылаться на проект B, потому что B не ссылается на A как на родительский. Пакет должен быть самостоятельно