Как создать пустой многомодульный проект Maven? - PullRequest
72 голосов
/ 12 июня 2011

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

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

Ответы [ 8 ]

117 голосов
/ 01 августа 2013

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

Вот разбивка:

  1. Создание корня верхнего уровня:

    mvn archetype:generate \
    -DarchetypeGroupId=org.codehaus.mojo.archetypes \
    -DarchetypeArtifactId=pom-root \
    -DarchetypeVersion=RELEASE
    
  2. cd в только что созданный корневой каталог.

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

    mvn archetype:generate \
    -DarchetypeGroupId=org.apache.maven.archetypes \
    -DarchetypeArtifactId=maven-archetype-quickstart \
    -DarchetypeVersion=RELEASE
    

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

46 голосов
/ 23 ноября 2013

Вот скриншот о том, как вы можете сделать это с Intellij Idea.Сначала запустите новый проект (Файл -> Новый проект), выберите «Модуль Maven»:

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.

19 голосов
/ 13 июня 2011

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

[axe@gromp test]$ mvn archetype:generate
..
<num>: remote -> pom-root (Root project archetype for creating multi module projects)
..
Choose a number: 109: <num>
.. 

[axe@gromp test]$ tree 
.
└── modules.test
    └── pom.xml

1 directory, 1 file

[axe@gromp 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 файлы) сами.Это можно сделать с помощью простого сценария оболочки или командного файла, если вам потребуется это более одного раза.

9 голосов
/ 12 июня 2011

Я не уверен, правильно ли я понимаю ваш вопрос, но для создания многомодульного проекта я обычно использую простой 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>

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

6 голосов
/ 10 июля 2011

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

5 голосов
/ 31 октября 2015

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

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  \
3 голосов
/ 15 января 2017

Рассмотрим закладки родительского проекта и 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

-Dackage - это структура пакета. Вот это закладки. Если он не указан, он будет считать 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, зайдите в 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 
1 голос
/ 25 июня 2013

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

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

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

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

  4. При импорте проекта Eclipse будет жаловаться на следующее Конфигурация проекта не обновлена ​​с pom.xml. Запустите Maven-> Обновить проект или используйте Quick Fix. Чтобы избежать вышеуказанной ошибки, щелкните правой кнопкой мыши и выберите Quick Fix. Это обновит POMS. Другой способ избежать этой ошибки - объявить подмодули в Parent pom

Ссылка на ссылку ниже для более подробной информации. http://maven.apache.org/guides/introduction/introduction-to-the-pom.html#Example_1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...