Как сделать мультимодульный проект maven
Сейчас я обычно нахожу файл 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":
Введите имя, нажмите "Далее", ничего не измените в следующих шагах, нажмите "Готово".
Теперь в вашем pom.xml введите
и включите автоматическое обновление:
Поместите курсор на m1 и нажмите Alt+Enter .
Модуль m1 будет автоматически добавлен в ваш проект. Теперь вы можете сделать Alt+Enter для m2 и его.
Вы также можете начать с добавления 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
Читайте также: