Руководство по Maven Archetype

Путеводитель по Maven Archetype

1. обзор

Архетип Maven - это абстракция своего рода проекта, который может быть реализован в конкретном индивидуальном проекте Maven. Корочеit’s a template project template from which other projects are created.

Основным преимуществом использования архетипов является стандартизация разработки проектов и предоставление разработчикам возможности легко следовать передовым методам и быстрее загружать свои проекты.

В этом руководстве мы рассмотрим, как создать собственный архетип, а затем как использовать его для создания проекта Maven с помощьюmaven-archetype-plugin.

2. Дескриптор архетипа Maven

The Maven archetype descriptor is the heart of the archetype project. Это XML-файл с именемarchetype-metadata.xml, расположенный в каталогеMETA-INF/maven jar-файла.

Он используется для описания метаданных архетипов:



    
        
            bar
        
    

    
        
            src/main/java
            
                **/*.java
            
        
    

    
        
    

ТегrequiredProperties используется для предоставления свойств во время создания проекта. Таким образом, нам будет предложено ввести для них значения с выбором принять значение по умолчанию.

fileSets,, с другой стороны, используются для настройки того, какие ресурсы будут скопированы в конкретный сгенерированный проект. Фильтрованный файл означает, что заполнители будут заменены предоставленными значениями в процессе генерации.

И, используяpackaged=”true” вfileSet, мы говорим, что выбранные файлы будут добавлены в иерархию папок, указанную параметромpackage .

Если мы хотим сгенерировать многомодульный проект, то тегmodules может помочь настроить все модули сгенерированного проекта.

Обратите внимание, что этот файл о Archetype 2 и выше. В версии 1.0.x файл назывался простоarchetype.xml и имел другую структуру.

Для получения дополнительной информации обязательно посмотритеofficial Apache docs.

3. Как создать архетип

An archetype is a normal Maven project with the following extra content:

  • src/main/resources/archetype-resources  - это шаблон, из которого ресурсы копируются во вновь созданный проект.

  • src/main/resources/META-INF/maven/archetype-metadata.xml: дескриптор, используемый для описания метаданных архетипов

Чтобы создать архетип вручную, мы можем начать с недавно созданного проекта Maven, а затем добавить ресурсы, упомянутые выше.

Или мы можем сгенерировать его, используяarchetype-maven-plugin, and, а затем настроить содержимое каталогаarchetype-resources и файлаarchetype-metadata.xml.

Для генерации архетипа мы можем использовать:

mvn archetype:generate -B -DarchetypeArtifactId=maven-archetype-archetype \
  -DarchetypeGroupId=maven-archetype \
  -DgroupId=com.example \
  -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 и настроив их в файлеarchetype-metadata.xml.

4. Создание архетипа

Теперь мы готовы настроить наш архетип. В качестве изюминки этого процесса мы собираемся продемонстрировать создание простого архетипа Maven для создания приложения RESTful на основе JAX-RS 2.1.

Назовем это простоmaven-archetype.

4.1. Упаковка архетипа

Начнем с измененияpom.xml of проекта архетипа, расположенного вthe maven-archetype directory:

maven-archetype

Этот тип упаковки доступен благодаря расширениюarchetype-packaging:


    
        
            org.apache.maven.archetype
            archetype-packaging
            3.0.1
        
    
    

4.2. Добавлениеpom.xml

Теперь давайте создадим файлpom.xml, расположенный в каталогеarchetype-resources:



    ${groupId}
    ${artifactId}
    ${version}
    war

    
        
            javax.ws.rs
            javax.ws.rs-api
            2.1
            provided
        
    

Как видим,groupId, artifactId иversion параметризованы. Они будут заменены при создании нового проекта из этого архетипа.

Мы можем поместить все необходимое для сгенерированного проекта, например, зависимости и плагины, в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/config/liberty.

4.4. Настройка метаданных

После добавления всех необходимых ресурсов мы можем теперь настроить, какие из них будут копироваться во время генерации через файлarchetype-metadata.xml.

Мы можем сказать нашему архетипу, что мы хотим, чтобы все исходные файлы Java были скопированы:



    
    
        
            src/main/java
            
                **/*.java
            
        
        
            src/main/config/liberty
            
                server.xml
            
        
    

Здесь мы хотим, чтобы все файлы Java из каталогаsrc/main/java и файлserver.xml изsrc/main/config/liberty, были скопированы.

4.5. Установка архетипа

Теперь, когда мы закончили собирать все вместе, мы можем установить архетип, вызвав эту команду:

mvn install

На этом этапе архетип зарегистрирован в файлеarchetype-catalog.xml,, расположенном в локальном репозитории Maven и, следовательно, готов к использованию.

5. Использование установленного архетипа

The maven-archetype-plugin allows the user to create a Maven project through the generate goal and existing archetype. Для получения дополнительной информации об этом плагине вы можете посетитьhomepage.

Эта команда использует этот плагин для генерации проекта Maven из нашего архетипа:

mvn archetype:generate -DarchetypeGroupId=com.example.archetypes
                       -DarchetypeArtifactId=maven-archetype
                       -DarchetypeVersion=1.0-SNAPSHOT
                       -DgroupId=com.example.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//ping

6. Заключение

В этой статье мы продемонстрировали, как создать и использовать архетип Maven.

Мы продемонстрировали, как создать архетип, а затем как настроить ресурсы шаблона с помощью файлаarchetype-metadata.xml.

Код, как обычно, можно найтиover on Github.