«1. Обзор
Архетип Maven — это абстракция своего рода проекта, который может быть воплощен в конкретный индивидуальный проект Maven. Короче говоря, это шаблон проекта, из которого создаются другие проекты.
Основным преимуществом использования архетипов является стандартизация разработки проектов и предоставление разработчикам возможности легко следовать рекомендациям и ускорять запуск своих проектов.
В этом руководстве мы рассмотрим, как создать собственный архетип, а затем использовать его для создания проекта Maven с помощью плагина maven-archetype-plugin.
2. Дескриптор архетипа Maven
Дескриптор архетипа Maven является сердцем проекта архетипа. Это XML-файл с именем archetype-metadata.xml, расположенный в каталоге META-INF/maven jar-файла.
Используется для описания метаданных архетипов:
<archetype-descriptor
...
name="custom-archetype">
<requiredProperties>
<requiredProperty key="foo">
<defaultValue>bar</defaultValue>
</requiredProperty>
</requiredProperties>
<fileSets>
<fileSet filtered="true" packaged="true">
<directory>src/main/java</directory>
<includes>
<include>**/*.java</include>
</includes>
</fileSet>
</fileSets>
<modules>
<module name="sub-module"></module>
</modules>
</archetype-descriptor>
Тег requiredProperties используется для предоставления свойств во время генерации проекта. Таким образом, нам будет предложено указать для них значения с возможностью принять значение по умолчанию.
Наборы файлов, с другой стороны, используются для настройки того, какие ресурсы будут скопированы в конкретный сгенерированный проект. Отфильтрованный файл означает, что заполнители будут заменены предоставленными значениями в процессе генерации.
И, используя packaged=“true” в наборе файлов, мы говорим, что выбранные файлы будут добавлены в иерархию папок, указанную свойством пакета.
Если мы хотим сгенерировать многомодульный проект, то теговые модули могут помочь настроить все модули сгенерированного проекта.
Обратите внимание, что этот файл относится к архетипу 2 и выше. В версии 1.0.x файл назывался просто archetype.xml и имел другую структуру.
Для получения дополнительной информации обязательно ознакомьтесь с официальной документацией Apache.
3. Как создать архетип
Архетип — это обычный проект Maven со следующим дополнительным содержимым:
-
src/main/resources/archetype-resources — это шаблон, из которого ресурсы копируются во вновь созданный project src/main/resources/META-INF/maven/archetype-metadata.xml: дескриптор, используемый для описания метаданных архетипов
Чтобы создать архетип вручную, мы можем начать с вновь созданного проекта Maven, а затем мы можем добавьте ресурсы, упомянутые выше.
Или мы можем сгенерировать его с помощью модуля archetype-maven-plugin, а затем настроить содержимое каталога archetype-resources и файла archetype-metadata.xml.
Чтобы сгенерировать архетип, мы можем использовать:
mvn archetype:generate -B -DarchetypeArtifactId=maven-archetype-archetype \
-DarchetypeGroupId=maven-archetype \
-DgroupId=com.baeldung \
-DartifactId=test-archetype
Мы также можем создать архетип из существующего проекта Maven:
mvn archetype:create-from-project
Он сгенерирован в target/generated-sources/archetype, готов к использованию. использовал.
Независимо от того, как мы создали архетип, в итоге мы получим следующую структуру:
archetype-root/
├── pom.xml
└── src
└── main
├── java
└── resources
├── archetype-resources
│ ├── pom.xml
│ └── src
└── META-INF
└── maven
└── archetype-metadata.xml
Теперь мы можем приступить к созданию нашего архетипа, поместив ресурсы в каталог archetype-resources и настроив их в файл архетип-метаданные.xml.
4. Создание архетипа
Теперь мы готовы настроить наш архетип. В качестве изюминки этого процесса мы продемонстрируем создание простого архетипа Maven для создания приложения RESTful на основе JAX-RS 2.1.
Давайте просто назовем это maven-archetype.
4.1. Упаковка архетипа
Начнем с изменения файла pom.xml проекта архетипа, расположенного в каталоге maven-archetype:
<packaging>maven-archetype</packaging>
Этот тип упаковки доступен благодаря расширению archetype-packaging:
<build>
<extensions>
<extension>
<groupId>org.apache.maven.archetype</groupId>
<artifactId>archetype-packaging</artifactId>
<version>3.0.1</version>
</extension>
</extensions>
<!--....-->
</build>
~~ ~ 4.2. Добавление pom.xml
Давайте теперь создадим файл pom.xml, расположенный в каталоге archetype-resources:
<project ...>
<groupId>${groupId}</groupId>
<artifactId>${artifactId}</artifactId>
<version>${version}</version>
<packaging>war</packaging>
<dependencies>
<dependency>
<groupId>javax.ws.rs</groupId>
<artifactId>javax.ws.rs-api</artifactId>
<version>2.1</version>
<scope>provided</scope>
</dependency>
</dependencies>
</project>
Как мы видим, groupId, ArtiftId и версия параметризованы. Они будут заменены при создании нового проекта из этого архетипа.
Мы можем поместить все необходимое для сгенерированного проекта, например зависимости и плагины, в pom.xml. Здесь мы добавили зависимость JAX RS, поскольку архетип будет использоваться для создания приложения на основе RESTful.
4.3. Добавление необходимых ресурсов
Далее мы можем добавить код Java для нашего приложения в archetype-resources/src/main/java.
«Класс для настройки приложения JAX-RS:
package ${package};
// import
@ApplicationPath("${app-path}")
public class AppConfig extends Application {
}
И класс для ресурса ping:
@Path("ping")
public class PingResource{
//...
}
Наконец, поместите файл конфигурации сервера, server.xml, в archetype-resources/src/main/ конфиг/либерти.
4.4. Настройка метаданных
После добавления всех необходимых ресурсов теперь мы можем настроить, какие из них будут скопированы во время генерации, через файл archetype-metadata.xml.
Мы можем указать нашему архетипу, что мы хотим, чтобы все исходные файлы Java были скопированы:
<archetype-descriptor
name="maven-archetype">
<!--...-->
<fileSets>
<fileSet filtered="true" packaged="true">
<directory>src/main/java</directory>
<includes>
<include>**/*.java</include>
</includes>
</fileSet>
<fileSet>
<directory>src/main/config/liberty</directory>
<includes>
<include>server.xml</include>
</includes>
</fileSet>
</fileSets>
</archetype-descriptor>
Здесь мы хотим, чтобы все файлы Java находились в каталоге src/main/java, а файл server.xml — в каталоге src/main. /config/liberty, который нужно скопировать.
4.5. Установка архетипа
Теперь, когда мы закончили собирать все вместе, мы можем установить архетип, вызвав эту команду:
mvn install
На этом этапе архетип зарегистрирован в файле archetype-catalog.xml, находится в локальном репозитории Maven и, следовательно, готов к использованию.
5. Использование установленного архетипа
Плагин maven-archetype-plugin позволяет пользователю создать проект Maven с помощью цели генерации и существующего архетипа. Для получения дополнительной информации об этом плагине вы можете посетить домашнюю страницу.
Эта команда использует этот подключаемый модуль для создания проекта Maven из нашего архетипа:
mvn archetype:generate -DarchetypeGroupId=com.baeldung.archetypes
-DarchetypeArtifactId=maven-archetype
-DarchetypeVersion=1.0-SNAPSHOT
-DgroupId=com.baeldung.restful
-DartifactId=cool-jaxrs-sample
-Dversion=1.0-SNAPSHOT
Затем мы должны передать GAV нашего архетипа в качестве аргументов цели maven-archetype-plugin:generate. Мы также можем передать GAV конкретного проекта, который мы хотим сгенерировать, в противном случае мы можем предоставить их в интерактивном режиме.
Таким образом, конкретный сгенерированный проект cool-jaxrs-sample готов к запуску без каких-либо изменений. Итак, мы можем запустить его, просто вызвав эту команду:
mvn package liberty:run
Затем мы можем получить доступ к этому URL-адресу:
http://localhost:9080/cool-jaxrs-sample/<app-path>/ping
6. Заключение
В этой статье мы продемонстрировали, как создавать и использовать архетип Мейвена.
Мы продемонстрировали, как создать архетип, а затем настроить ресурсы шаблона с помощью файла archetype-metadata.xml.
Код, как обычно, можно найти на Github.