Как сделать мультимодульный проект maven

Обновлено: 07.07.2024

Сейчас я обычно нахожу файл pom.xml в Интернете, который имеет упаковку pom и копирует и вставляет его для создания моего родительского проекта. Затем я использовал archetype:create внутри родительского каталога для создания вспомогательных модулей, но с тех пор archetype:create стал устаревшим.

Любые рекомендации по созданию новых многомодульных проектов Maven?

Самый простой способ, которым я нашел это, - использовать архетип pom-root для создания pom верхнего уровня, а затем повторно использовать archetype:generate для создания каждого модуля отдельно. Это автоматически добавит модули в корневой pom (агрегатор) и установит корневой pom в качестве родительского pom для каждого модуля (отредактируйте: по-видимому, некоторые архетипы могут иметь жестко закодированный родительский элемент, но он работает для maven-archetype-quickstart ).

Создайте корень верхнего уровня:

cd в ваш вновь созданный корневой каталог.

Для каждого модуля:

Обратите внимание, что -DarchetypeVersion=RELEASE выше автоматически будет использовать последнюю версию архетипа. Вы можете добавить -DgroupId=. к каждой из этих команд, чтобы не повторять себя.

Вот скринкаст о том, как вы могли бы это сделать с Intellij Idea. Сначала запустите новый проект (Файл → Новый проект), выберите "Maven Module":

enter image description here

Введите имя, нажмите "Далее", ничего не измените в следующих шагах, нажмите "Готово".

Теперь в вашем pom.xml введите

и включите автоматическое обновление:

enter image description here

enter image description here

Поместите курсор на m1 и нажмите Alt+Enter .

enter image description here

Модуль m1 будет автоматически добавлен в ваш проект. Теперь вы можете сделать Alt+Enter для m2 и его.

enter image description here

Вы также можете начать с добавления pom.xml для существующего модуля вашего проекта: щелкните его правой кнопкой мыши в дереве проекта, "Добавить поддержку рамок. ", выберите "Maven". Это создаст pom.xml .

mvn archetype:create устарел в пользу mvn archetype:generate , поэтому просто изменилось имя. Существует архетип для многомодульных проектов в официальных репозиториях, поэтому выполнение этой команды дает результат (минималистский):

Итак, в основном вам придется самостоятельно создавать структуру папок и дескрипторы модулей (файлы pom.xml). Использование простой оболочки script или командного файла легко сделает это, если вам потребуется более одного раза.

Я не уверен, правильно ли понимаю ваш вопрос, но для создания проекта с несколькими модулями я обычно использую простой pom (на корневом уровне):

Это, вероятно, самый простой родительский pom-модуль, который вы можете использовать. Проект, который вы хотите создать, может уже иметь архетип, который может помочь вам в создании структуры. Хотя вы можете получить помощь от IDE, чтобы написать сам pom, если для типа проекта, который вы хотите построить, имеется архетип, обычно проще использовать это.

Если вы работаете с Eclipse IDE, вы должны использовать плагин m2eclipse. Это один из самых простых способов создания многомодульных проектов. Вы можете добавить модуль в каждый проект maven, создав "Maven Module-Project" в eclipse. При этом у вас есть возможность выбрать родительский проект. Плагин делает все, что означает, что он копирует новый модуль в родительский модуль и изменяет файл pom.xml.

Тот же ответ, что и Chris H. Я только что добавил параметры groupId, artifactId и версии и отключил интерактивный режим.

Простые 4 шага, если вы хотите избежать скопирования xml.

Создайте проект архетипа 284 (по умолчанию). Откройте созданный файл pom, измените упаковку с jar на pom

Удалите папку src из проекта. Теперь это родительский проект без src, поскольку упаковка является pom.
В указанной папке создайте еще один новый проект (284 по умолчанию). Измените упаковку на войну или ejb или ухо. Это становится дополнительным модулем.

Выполните mvn eclipse: eclipse на каждом модуле. Теперь проект должен быть готов к ввозу в качестве проекта Eclipse.

Этот урок освещает создание вами простого Java-приложения с использованием Maven.

Что вы создадите

Вы создадите простое приложение и соберете его с помощью Maven.

Что вам потребуется

  • Примерно 15 минут свободного времени
  • Любимый текстовый редактор или IDE и выше

Как проходить этот урок

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

Чтобы начать с нуля, перейдите в Настройка проекта.

Когда вы закончите, можете сравнить получившийся результат с образцом в gs-maven/complete .

Настройка проекта

Для начала вам необходимо настроить Java-проект перед тем, как собрать его Maven'ом. Т.к. урок посвящен Maven, сделаем проект максимально простым, насколько это возможно.

Создание структуры каталогов

В выбранном вами каталоге проекта создайте следующую структуру каталогов; к примеру, командой mkdir -p src/main/java/hello для *nix систем:

Внутри src/main/java/hello директории вы можете создать любые Java-классы, какие вы хотите. Для простоты и согласованности с остальной частью урока, Spring рекомендует вам создать два класса: HelloWorld.java и Greeter.java .

Теперь, когда у вас есть проект, который вы можете собрать с Maven, вам нужно установит сам Maven.

Распакуйте архив и добавьте путь к каталогу bin в переменную окружения path.

Чтобы протестировать правильность установки Maven, запустите в командной строке:

Теперь у вас есть установленный Maven.

Создание простой сборки Maven

Теперь, когда Maven установлен, вам необходимо создать определение Maven-проекта. Maven-проекты определяются как XML-файлы с названием pom.xml. Помимо всего прочего, этот файл определяет имя проекта, версию, а также зависимости от сторонних библиотек.

Создайте файл с названием pom.xml в корневом каталоге проекта и наполните его следующим содержанием:

За исключением дополнительного элемента

, это простейший из pom.xml файлов, необходимый для сборки Java проекта. Он включает следующие детали конфигурации проекта:

  • - версия POM-модели (всегда 4.0.0)
  • - группа или организация, к которой принадлежит проект. Чаще всего выражается в виде перевернутого наоборот доменного имени
  • - имя, которое будет передано библиотеке экземпляра(artifact) проекта (к примеру, имя его JAR или WAR файла)
  • - версия, с которой будет собран проект

На данном этапе мы имеем минимальное, но уже рабочее определение Maven-проекта.

Сборка Java кода

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

Попробуйте собрать, выполнив команду, приведенную ниже:

Этим вы запустите Maven, передав ему указание на выполнение задачи compile. Когда он закончит, вы должны найни скомпилированные .class файлы в target/classes директории.

Вряд ли вы захотите распостранять или работать напрямую с .class файлами, поэтому вам полее подойдет выполнение задачи package:

Задача package включает компиляцию вашего Java кода, запуск тестов, а в конце упаковывает в JAR-файл в target директории. Название JAR-файла будет основано на и . К примеру, с минимальным pom.xml(см. выше), JAR-файл будет иметь название gs-maven-initial-0.1.0.jar.

с "jar" на "war", то результатом будет WAR-файл в target директории вместо JAR-файла.

Maven также хранит репозиторий зависимостей на вашей локальной машине(обычно в .m2/repository директории в вашей домашней папке) для быстрого доступа к зависимостям проекта. Если вы хотите добавить JAR-файл вашего проекта в локальный репозиторий, тогда вам необходимо выполнить задачу install :

Задача install включает компиляцию, тестирование, упаковку кода проекта, а затем копирование в локальный репозиторий, тем самым другие проекты смогут ссылаться на него как на зависимость.

Говоря о зависимостях, пришло время объявлять зависимости в Maven сборке.

Объявление зависимостей

Простой "Hello World" пример полностью автономный и не зависит от каких-либо дополнительных библиотек. Однако, большинство приложений зависит от внешних библиотек, с реализацией распостраненного и/или сложного функционала.

К примеру, предположим, что в дополнение к "Hello World!" вы хотите, чтобы приложение печатало текущую дату и время. Вы могли бы использовать функциональность из стандартных(native) Java библиотек, но мы можем сделать это и другими интересными способами, например с помощью Joda Time библиотеки.

Для начала, изменим HelloWorld.java , как показано ниже:

Здесь HelloWorld использует Joda Time LocalTime класс для получения и печати текущего времени.

Этот блок XML объявляет список зависимостей проекта. В частности, он объявляет единственную зависимость от Joda Time библиотеки. В элементе, зависимость определяется через описание трех вложенных элементов:

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

По умолчанию, все зависимости определены как зависимости. Т.е. они должны быть доступны во время компиляции(а если вы собираете WAR-файл, то в /WEB-INF/lib каталоге). Кроме того, вы можете добавить элемент, с одним из значений:

  • provided - зависимости, которые требуются для компиляции кода проекта, но которые будут доступны во время выполнения кода контейнером(например, Java Servlet API)
  • test - зависимости, которые используются для компиляции и запуска тестов, но не требуемые для сборки или выполнения кода проекта

Сейчас, если вы выполните mvn compile или mvn package , Maven должен будет разрешить Joda Time зависимость из Maven Central репозитория и успешно собрать проект.

Здесь полная версия pom.xml :

Полная версия pom.xml использует Maven Shade Plugin как удобный инструмент для создание выполняемого JAR-файла. Целью данного урока является показать, как начать работать с Maven, не используя, в частности, этот плагин.

Поздравляем! Вы создали простой, но эффективный файл сборки Maven для сборки Java проектов.

какова наилучшая практика для указания версии многомодульного проекта maven?

Я хотел бы иметь одну строку Версия во всех модулях. Даже если я могу иметь только одно определение версии в корневом Родительском pom, мне нужно указать родительскую версию pom в каждом pom. Это означает, что если мне нужно изменить версию, мне нужно изменить все помпоны. Практически лишено смысла. Есть идеи??

С mvn versions:set -DnewVersion="1.1-SNAPSHOT" вы можете установить во всех базовых проектах maven заданную версию.

после этого вы должны сделать mvn versions:commit для удаления временных файлов и фиксации на VCS

лучший способ определить вашу версию в Родительском пом.XML следующим образом.

тогда вы не хотите менять номер своей версии один за другим во всех дочерних pom.XML.

ребенок, пом.XML может добавить зависимость следующим образом

еще один "лучший" способ-создать родительский pom рядом с многомодульным pom, который обеспечит управление зависимостями, содержащее ссылку на многомодульный проект с версией родительского POM IT self. Если проект многомодульный нужен другой проект многомодульный как зависимость эта будет лучшей для вас. Родительский pom должен быть частью многомодульного pom:

и родительский pom должен содержать управление зависимостями для вашего мультимодуля проект

весь ваш мультимодульный проект не будет определять groupId и номер версии, потому что они получат эту информацию от родительского pom и дополнительно, если проект "третий" нуждается в зависимости my.первый.проект тогда зависимость в проекте "третий" POM-файл будет:

Это путь или мы имеем дело с проектами multi модуля и управлением версиями.

Это основной вопрос, я просто не знаком с многомодульными структурами maven. Скажем, у меня есть веб-приложение. И я хочу подключить к нему некоторые модули (некоторые службы). Мне нужно сделать веб-приложение только одним из модулей, зависящим от некоторых других, и затем запустить его? Сначала я думал, что могу запустить весь проект, но этот вариант оказывается неактивным в моей среде IDE (теперь я использую NetBeans), что заставило меня думать, что я должен запускать что-то вроде основного модуля (в этом случае веб-приложение). Это так? Заранее спасибо.

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

В то время как корневой модуль содержит такую вещь:

В модуле-1 ваш pom должен выглядеть так:

в модуле-2 он выглядит примерно так же. и в военном модуле он выглядит так:

Если у вас есть зависимости между модулями, например, модуль-1, зависит от модуля-2, он выглядит следующим образом в модуле-1:

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


Maven — это инструмент для сборки Java проекта: компиляции, создания jar, создания дистрибутива программы, генерации документации. Простые проекты без maven можно собрать в командной строке. Если собирать большие проекты с командной строки, то команда для сборки будет очень длинной, поэтому её иногда записывают в bat/sh скрипт. Но такие скрипты зависят от платформы. Для того чтобы избавиться от этой зависимости и упростить написание скрипта используют инструменты для сборки проекта, например maven

Миграция на Maven

Из любого стандартного проекта IDEA можно мигрировать на Maven проект.

Для этого необходимо выполнить следующие действия:

  • выберите проект или модуль которому будете добавлять Maven, в примере будет модуль


выбираем проект

  • нажмите правой клавишей мыши (ПКМ) на проекте/модуле и выберите пункт Add Framework Support
  • выберите тип проекта Maven и нажмите OK
  • после этого если у вас проект под контролем версионирования Git, будет предложено добавить файл pom.xml в отслеживание Git. Нажимайте Add и pom.xml сразу добавиться в stage и готов к коммиту.

внесение изменений в git

вы можете добавить файл pom.xml к коммиту позже, также у вас может не появится такое окно если вы ранее уже выбрали действие по умолчанию


  • вам будет предложено установить значения groupId, artifactId, version в pom.xml


В Maven каждый проект идентифицируется парой groupId и artifactId

Импортирование изменений pom.xml

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

В зависимости от версии IDEA, выполните следующие действия:

используйте сочетание клавиш CTRL + SHIFT + O или во всплывающем окошке нажмите кнопку Reimport

После изменения свойств, выполните чтение (импортирование) изменений в проекте. Для этого нажмите ПКМ по файлу pom.xml в окне Project выберите Maven → Reimport


Error:java: error: release version 5 not supported

При попытке запустить проект у вам может быть ошибка:


так как maven по умолчанию пытается компилировать проект используя версию языка 1.5 (JDK 5). И такая ошибка будет если вы используете в проекте библиотеки из более высоких версий java.

Для того чтобы указать maven какую библиотеку использовать — необходимо явно указать это в pom.xml добавив блок

такая запись будет соответствовать JDK8, для JDK14 формат записи будет:

После этих действий будет возможность добавлять зависимости в проект используя maven, настраивать сборку проекта. А также удалить файлы *.iml из контроля git, так как зависимости и структуру проекта контролирует maven

Читайте также: