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

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

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

Вопрос в том, как добавить эти модули в зависимости от основного модуля?

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

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

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

Ответ 1

Вопрос в том, как добавить эти модули в зависимости от основного модуля?

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

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

Если ваш основной модуль зависит от некоторого модуля A, а затем только, pom основного модуля должен содержать декларацию зависимости к модулю A. Вы делаете это для всех зависимостей ваш модуль.

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

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

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

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

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