Как создать пустой мультимодульный проект 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