Создание Maven-проекта: archetype, структура каталогов и IntelliJ IDEA - Вопросы

Всего: 5 вопросов

1. 

Какими способами можно создать Maven-проект и обязательно ли использовать archetype?

Создать Maven-проект — значит получить каталог с файлом pom.xml (координаты groupId, artifactId, version) и стандартной структурой папок src/main/java, src/test/java и других. Способы:

  • Командная строка — mvn archetype:generate по шаблону (archetype). Нужны установленные Maven и JDK; работает везде, в том числе на сервере и в скриптах, но шаблон может содержать устаревшие настройки — pom.xml нужно проверить.
  • IntelliJ IDEA — мастер New Project: генератор Java с Build system = Maven или генератор Maven Archetype. Maven встроен в IDE, проект сразу импортирован.
  • Вручную — написать pom.xml и создать каталоги. Полный контроль, ничего лишнего; так переводят на Maven уже существующий код.

Archetype не обязателен: это лишь способ быстро получить заготовку. Maven-проектом каталог делает pom.xml и стандартная структура папок. Результат во всех случаях одинаковый — проект, который собирается командой mvn package. Spring Boot-проекты обычно создают генератором start.spring.io (Spring Initializr), который тоже выдаёт обычный Maven-проект.

2. 

Что такое Maven archetype, как работает команда mvn archetype:generate и что проверить в сгенерированном pom.xml?

Архетип (archetype) — шаблон проекта, опубликованный в репозитории как обычный артефакт: заготовка pom.xml, каталоги и примеры классов. Официальные архетипы (группа org.apache.maven.archetypes): maven-archetype-quickstart (jar, класс App и тест AppTest — вариант по умолчанию), maven-archetype-webapp (war, src/main/webapp), maven-archetype-simple, maven-archetype-archetype (каркас своего архетипа).

mvn archetype:generate запускает цель generate плагина maven-archetype-plugin и создаёт проект в подкаталоге с именем artifactId. Режимы: интерактивный (список архетипов и вопросы в консоли) и пакетный — -DinteractiveMode=false, все параметры через -D (archetypeGroupId, archetypeArtifactId, archetypeVersion, groupId, artifactId, version, package). В пакетном режиме groupId и artifactId обязательны, version по умолчанию 1.0-SNAPSHOT, package равен groupId. Версию архетипа указывайте явно. В PowerShell каждый аргумент -D берут в кавычки.

После генерации проверьте в pom.xml: версию Java (одно свойство maven.compiler.release вместо пары source/target — quickstart до 1.4 включительно задаёт 1.7), версию JUnit (старые шаблоны — JUnit 4 или 3.8.1, версия 1.5 — JUnit 5) и кодировку project.build.sourceEncoding = UTF-8.

3. 

Как выбрать groupId, artifactId и version для нового Maven-проекта?

  • groupId — организация или группа проектов в формате перевёрнутого доменного имени, которым вы владеете (или io.github.ваш-логин): только строчные латинские буквы, цифры и точки. Хорошо: com.examclouds, org.example.shop; плохо: MyCompany, com.my-company.
  • artifactId — имя проекта строчными буквами, слова через дефис, без пробелов и версии: hello-maven, online-shop, но не Hello Maven или shop-1.0.
  • version — номер версии; суффикс -SNAPSHOT означает версию в разработке (1.0-SNAPSHOT), без суффикса — выпущенный релиз (1.0.0).

Архетип по умолчанию берёт имя Java-пакета из groupId (классы попадут в com/examclouds/). Если в groupId есть дефис или сегмент начинается с цифры, сгенерированный пакет не скомпилируется — задайте корректный -Dpackage явно. Из artifactId и version складывается имя готового файла: hello-maven-1.0-SNAPSHOT.jar.

4. 

Какова стандартная структура каталогов Maven-проекта (Standard Directory Layout) и что куда кладут?

Maven знает стандартные пути по умолчанию, поэтому указывать их в pom.xml не нужно — достаточно положить файлы в правильное место:

  • src/main/java — исходный код в папках по пакетам; компилируется в target/classes и входит в jar/war.
  • src/main/resources — конфигурация и данные (.properties, .xml, .yml, шаблоны, SQL); копируется в target/classes, то есть в корень classpath и в jar.
  • src/test/java — тесты в тех же пакетах, что и проверяемый код (тогда доступны package-private члены); компилируется в target/test-classes, в jar не попадает.
  • src/test/resources — файлы только для тестов; в jar не попадают.
  • src/main/webapp — только для packaging = war (WEB-INF/web.xml, JSP, статика).
  • target — результат сборки, вручную ничего не хранят; удаляется mvn clean, добавляется в .gitignore.

Maven не ищет файлы по всему проекту: ресурс в src/main/java не попадёт в jar, .java в src/main/resources не скомпилируется, а папку src/java Maven не увидит (No sources to compile). Переопределять пути в pom.xml стоит только для старого проекта, который нельзя реорганизовать.

5. 

Как создать и открыть Maven-проект в IntelliJ IDEA и что делать после правки pom.xml?

Новый проект: File → New → Project, генератор Java с Build system = Maven (если оставить IntelliJ, проект будет без pom.xml) или генератор Maven Archetype; указать Name, Location, JDK и GroupId/ArtifactId в Advanced Settings. IDE создаст pom.xml и стандартные каталоги и сразу импортирует проект; отдельно ставить Maven не нужно — он встроен.

Окно Maven показывает Lifecycle (фазы запускаются двойным щелчком), Plugins и Dependencies. IDE не перечитывает pom.xml на каждое нажатие: после правки нажмите Load Maven Changes (или Reload All Maven Projects в окне Maven), иначе новая зависимость в коде останется красной.

Импорт существующего проекта: File → Open → pom.xml → Open as Project; если pom.xml в подпапке не распознан — правый щелчок → Add as Maven Project.

Настройки (Build, Execution, Deployment → Build Tools → Maven): Maven home path — Bundled или своя установка, User settings file и Local repository, Runner — JDK для Maven. Встроенный Maven недоступен во вкладке Terminal, а IDE и терминал могут запускать Maven на разных JDK — если в IDE собирается, а в терминале нет, сравните JDK в Runner и вывод mvn -version.

Страница 1 из 1