Как создать пустой мультимодульный проект Maven?
Сейчас я обычно нахожу файл pom.xml
в Интернете, который имеет упаковку pom
и копирует и вставляет его для создания моего родительского проекта. Затем я использовал archetype:create
внутри родительского каталога для создания вспомогательных модулей, но с тех пор archetype:create
стал устаревшим.
Любые рекомендации по созданию новых многомодульных проектов Maven?
Ответы
Ответ 1
Самый простой способ, которым я нашел это, - использовать архетип pom-root
для создания pom верхнего уровня, а затем повторно использовать archetype:generate
для создания каждого модуля отдельно. Это автоматически добавит модули в корневой pom (агрегатор) и установит корневой pom в качестве родительского pom для каждого модуля (отредактируйте: по-видимому, некоторые архетипы могут иметь жестко закодированный родительский элемент, но он работает для maven-archetype-quickstart
).
Здесь пробой:
-
Создайте корень верхнего уровня:
mvn archetype:generate \
-DarchetypeGroupId=org.codehaus.mojo.archetypes \
-DarchetypeArtifactId=pom-root \
-DarchetypeVersion=RELEASE
-
cd
в ваш вновь созданный корневой каталог.
-
Для каждого модуля:
mvn archetype:generate \
-DarchetypeGroupId=org.apache.maven.archetypes \
-DarchetypeArtifactId=maven-archetype-quickstart \
-DarchetypeVersion=RELEASE
Обратите внимание, что -DarchetypeVersion=RELEASE
выше автоматически будет использовать последнюю версию архетипа. Вы можете добавить -DgroupId=...
к каждой из этих команд, чтобы не повторять себя.
Ответ 2
Вот скринкаст о том, как вы могли бы это сделать с Intellij Idea. Сначала запустите новый проект (Файл → Новый проект), выберите "Maven Module":
![enter image description here]()
Введите имя, нажмите "Далее", ничего не измените в следующих шагах, нажмите "Готово".
Теперь в вашем pom.xml
введите <packaging>
и включите автоматическое обновление:
![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
.
Ответ 3
mvn archetype:create
устарел в пользу mvn archetype:generate
, поэтому просто изменилось имя. Существует архетип для многомодульных проектов в официальных репозиториях, поэтому выполнение этой команды дает результат (минималистский):
[[email protected] test]$ mvn archetype:generate
..
<num>: remote -> pom-root (Root project archetype for creating multi module projects)
..
Choose a number: 109: <num>
..
[[email protected] test]$ tree
.
└── modules.test
└── pom.xml
1 directory, 1 file
[[email protected] test]$ cat modules.test/pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>modules.test</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<name>modules.test</name>
</project>
Итак, в основном вам придется самостоятельно создавать структуру папок и дескрипторы модулей (файлы pom.xml). Использование простой оболочки script или командного файла легко сделает это, если вам потребуется более одного раза.
Ответ 4
Я не уверен, правильно ли понимаю ваш вопрос, но для создания проекта с несколькими модулями я обычно использую простой pom (на корневом уровне):
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.vijaykiran</groupId>
<artifactId>myproject-parent</artifactId>
<version>1.0</version>
<packaging>pom</packaging>
<modules>
<module>m1</module>
<module>m2</module>
</modules>
</project>
Это, вероятно, самый простой родительский pom-модуль, который вы можете использовать. Проект, который вы хотите создать, может уже иметь архетип, который может помочь вам в создании структуры. Хотя вы можете получить помощь от IDE, чтобы написать сам pom, если для типа проекта, который вы хотите построить, имеется архетип, обычно проще использовать это.
Ответ 5
Если вы работаете с Eclipse IDE, вы должны использовать плагин m2eclipse. Это один из самых простых способов создания многомодульных проектов. Вы можете добавить модуль в каждый проект maven, создав "Maven Module-Project" в eclipse. При этом у вас есть возможность выбрать родительский проект. Плагин делает все, что означает, что он копирует новый модуль в родительский модуль и изменяет файл pom.xml.
Ответ 6
Тот же ответ, что и Chris H. Я только что добавил параметры groupId, artifactId и версии и отключил интерактивный режим.
mvn archetype:generate -DarchetypeGroupId=org.codehaus.mojo.archetypes \
-DarchetypeArtifactId=pom-root \
-DarchetypeVersion=RELEASE \
-DinteractiveMode=false \
-DgroupId=com.mycompany.app \
-DartifactId=my-app \
-Dversion=1.0.0-SNAPSHOT \
Ответ 7
Простые 4 шага, если вы хотите избежать скопирования xml.
-
Создайте проект архетипа 284 (по умолчанию). Откройте созданный файл pom, измените упаковку с jar на pom
-
Удалите папку src из проекта. Теперь это родительский проект без src, поскольку упаковка является pom.
В указанной папке создайте еще один новый проект (284 по умолчанию). Измените упаковку на войну или ejb или ухо. Это становится дополнительным модулем.
-
Выполните mvn eclipse: eclipse на каждом модуле. Теперь проект должен быть готов к ввозу в качестве проекта Eclipse.
-
При импорте проекта Eclipse будет жаловаться ниже
Pom.xml Конфигурация проекта не обновляется. Запустите Maven- > Update Project или используйте Quick Fix.
Чтобы избежать вышеуказанной ошибки, щелкните правой кнопкой мыши и выберите "Быстрое исправление". Это обновит POMS. Другой способ избежать этой ошибки заключается в объявлении субмодулей в Parent pom
Ссылка на приведенную ниже ссылку для получения более подробной информации.
http://maven.apache.org/guides/introduction/introduction-to-the-pom.html#Example_1
Ответ 8
Рассмотрим родительские закладки проекта и остальную часть 3 модулей, безопасность и модель, ссылаясь на Spring docs.
Он не имеет зависимостей, как в документе Spring, только базовая настройка с многомодульной точки зрения.
Чтобы создать родительский проект maven в неинтерактивном режиме/пакетном режиме
mvn archetype:generate \
-DarchetypeGroupId=org.codehaus.mojo.archetypes \
-DarchetypeArtifactId=pom-root \
-DarchetypeVersion=RELEASE \
-DgroupId=bookmarks \
-DartifactId=bookmarks \
-Dversion=0.0.1-SNAPSHOT \
-DinteractiveMode=false
Создание вспомогательных модулей в неинтерактивном режиме/пакетном режиме.
cd в ваш вновь созданный корневой каталог. Ссылаясь на ответ @Chris.H
-Dpackage - это структура пакета. Здесь это закладки.
Если он не указан, он рассмотрит файл artifactId как пакет по умолчанию
mvn archetype:generate \
-DarchetypeGroupId=org.apache.maven.archetypes \
-DarchetypeArtifactId=maven-archetype-quickstart \
-DarchetypeVersion=RELEASE \
-DgroupId=model \
-DartifactId=model \
-Dversion=0.0.1-SNAPSHOT \
-Dpackage=bookmarks \
-DinteractiveMode=false
Чтобы создать новый модуль в eclipse goto File- > new- > other- > maven- > maven module, это немедленно появляется в проводнике пакетов рабочего пространства eclipse.
Или из cli, cd внутри родительской папки, закладок и запускайте следующее, это будет
создайте проект, а затем вы должны импортировать в eclipse в качестве проекта maven или можете работать от родителя, здесь закладок проекта
mvn archetype:generate \
-DarchetypeGroupId=org.apache.maven.archetypes \
-DarchetypeArtifactId=maven-archetype-quickstart \
-DarchetypeVersion=RELEASE \
-DgroupId=security \
-DartifactId=security \
-Dversion=0.0.1-SNAPSHOT \
-Dpackage=bookmarks \
-DinteractiveMode=false