Многомодульный проект IntelliJ с maven - как добавить зависимости от одного модуля к другому?

допустим, у меня есть maven проект, который имеет некоторые модули maven внутри.

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

вопрос, Как добавить эти модули в качестве зависимостей к основному модулю?

Я знаю, если у меня есть пользовательский lib, который я хочу использовать с maven, скажем utilities project, Я должен скомпилировать банку проекта, сделать mvn install:install-file на него, чтобы установить его на локальном репозиторий, а затем добавьте его в pom.xml.

Я должен сделать это со всеми моими модулями и добавить зависимость к pom.xml на моем основном модуле? Потому что, если это должно быть сделано так, будет много работы при изменении кода на других модулях.

какова наилучшая практика использования, чтобы избежать проблем компиляции / установки модулей в локальный репозиторий?

1 ответов


вопрос, Как добавить эти модули в качестве зависимостей к основному модулю?

так же, как вы добавляете любую другую зависимость в свой проект maven. Добавив идентификатор группы, идентификатор артефакта и версию в <dependency> элемент

Я должен сделать это со всеми моими модулями и добавить зависимость к pom.xml на моем основном модуле?

если ваш основной модуль зависит на каком-то модуле A тогда только пом основной модуль должен содержать объявление зависимостей по отношению к модулю A. Вы делаете это для всех зависимостей вашего модуля.

Я не знаю, что вы подразумеваете под "большой работой при изменении кода на других модулях". Maven не имеет ничего общего с изменениями кода, он просто строит проекты, как они выглядят в данный момент...

какова наилучшая практика использования, чтобы избежать проблем компиляции / установки модулей на локальный хранилище?

любой проект, который вы вызываете mvn install on строится, и jar копируется в локальный репозиторий. Это все, что вам нужно сделать, чтобы получить банку в репо. Это также поместит все зависимые банки, если они доступны, в локальное РЕПО.

что касается лучших практик для многомодульных проектов:

если ваш родительский проект (тот, который имеет модули внутри) имеет <modules> раздел, в котором перечислены модули вашего приложения, и модули находятся в подкаталоги вашего родительского проекта, то вы просто mvn install (или что вы хотите сделать) Родительский проект, и это приведет к тому, что все модули будут построены в порядке, определенном объявленными зависимостями между ними. Это означает, что если ваш основной модуль зависит от модуля A, то модуль A будет построен перед основным модулем. Таким образом, вы можете создавать и устанавливать все свои модули с помощью одной команды. С другой стороны, этот подход делает более плотную связь между модулями, что нежелательно в некоторых случаях это зависит от вашего варианта использования, является ли это хорошим подходом или нет.