Guia do Arquétipo Maven

Guia do Arquétipo Maven

1. Visão geral

Um arquétipo do Maven é uma abstração de um tipo de projeto que pode ser instanciado em um projeto Maven concreto e personalizado. Resumindo,it’s a template project template from which other projects are created.

O principal benefício do uso de arquétipos é padronizar o desenvolvimento do projeto e permitir que os desenvolvedores sigam facilmente as melhores práticas enquanto inicializam seus projetos mais rapidamente.

Neste tutorial, veremos como criar um arquétipo personalizado e, em seguida, como usá-lo para gerar um projeto Maven por meio domaven-archetype-plugin.

2. Descritor do arquétipo Maven

The Maven archetype descriptor is the heart of the archetype project. É um arquivo XML chamadoarchetype-metadata.xml e localizado no diretórioMETA-INF/maven do jar.

É usado para descrever metadados de arquétipos:



    
        
            bar
        
    

    
        
            src/main/java
            
                **/*.java
            
        
    

    
        
    

A tagrequiredProperties é usada para fornecer propriedades durante a geração do projeto. Assim, seremos solicitados a fornecer valores para eles, com a opção de aceitar o valor padrão.

fileSets,, por outro lado, são usados ​​para configurar quais recursos serão copiados no projeto concreto gerado. Um arquivo filtrado significa que os espaços reservados serão substituídos pelos valores fornecidos durante o processo de geração.

E, ao usarpackaged=”true” emfileSet, estamos dizendo que os arquivos selecionados serão adicionados à hierarquia de pastas especificada pela spropertypackage .

Se quisermos gerar um projeto multimódulo, o tagmodules pode ajudar a configurar todos os módulos do projeto gerado.

Observe que este arquivo é sobre o arquétipo 2 e acima. Na versão 1.0.x, o arquivo se chamava apenasarchetype.xmle tinha uma estrutura diferente.

Para obter mais informações, definitivamente dê uma olhada emofficial Apache docs.

3. Como criar um arquétipo

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

  • src/main/resources/archetype-resources  é o modelo a partir do qual os recursos são copiados para o projeto recém-criado

  • src/main/resources/META-INF/maven/archetype-metadata.xml: é o descritor usado para descrever os metadados dos arquétipos

Para criar um arquétipo manualmente, podemos começar com um projeto Maven recém-criado e adicionar os recursos mencionados acima.

Ou podemos gerá-lo usando a areiaarchetype-maven-plugin, e personalizar o conteúdo do diretórioarchetype-resourcese do arquivoarchetype-metadata.xml.

Para gerar o arquétipo, podemos usar:

mvn archetype:generate -B -DarchetypeArtifactId=maven-archetype-archetype \
  -DarchetypeGroupId=maven-archetype \
  -DgroupId=com.example \
  -DartifactId=test-archetype

Também podemos criar o arquétipo a partir de um projeto existente do Maven:

mvn archetype:create-from-project

É gerado emtarget/generated-sources/archetype, pronto para ser usado.

Não importa como criamos o arquétipo, acabaremos com a seguinte estrutura:

archetype-root/
├── pom.xml
└── src
    └── main
        ├── java
        └── resources
            ├── archetype-resources
            │   ├── pom.xml
            │   └── src
            └── META-INF
                └── maven
                    └── archetype-metadata.xml

Agora podemos começar a construir nosso arquétipo colocando recursos no diretórioarchetype-resourcese configurando-os no arquivoarchetype-metadata.xml.

4. Construindo o Arquétipo

Agora estamos prontos para personalizar nosso arquétipo. Para o destaque deste processo, vamos mostrar a criação de um arquétipo Maven simples para gerar um aplicativo RESTful baseado em JAX-RS 2.1.

Vamos apenas chamá-lo demaven-archetype.

4.1. Embalagem de arquétipo

Vamos começar modificando opom.xml of do projeto de arquétipo localizado emthe maven-archetype directory:

maven-archetype

Este tipo de embalagem está disponível graças à extensãoarchetype-packaging:


    
        
            org.apache.maven.archetype
            archetype-packaging
            3.0.1
        
    
    

4.2. Adicionando opom.xml

Vamos agora criar um arquivopom.xml localizado no diretórioarchetype-resources:



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

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

Como podemos ver,groupId, artifactId eversion são parametrizados. Eles serão substituídos durante a criação de um novo projeto desse arquétipo.

Podemos colocar tudo o que é necessário para o projeto gerado, como dependências e plug-ins, empom.xml. Aqui, adicionamos a dependência JAX RS, pois o arquétipo será usado para gerar o aplicativo baseado em RESTful.

4.3. Adicionando Recursos Necessários

A seguir, podemos adicionar algum código Java para nosso aplicativo emarchetype-resources/src/main/java.

Uma classe para configurar o aplicativo JAX-RS:

package ${package};
// import
@ApplicationPath("${app-path}")
public class AppConfig extends Application {
}

E uma classe para um recurso de ping:

@Path("ping")
public class PingResource{
    //...
}

Finalmente, coloque o arquivo de configuração do servidor,server.xml, emarchetype-resources/src/main/config/liberty.

4.4. Configurando Metadados

Depois de adicionar todos os recursos necessários, podemos agora configurar quais serão copiados durante a geração através do arquivoarchetype-metadata.xml.

Podemos dizer ao nosso arquétipo que queremos que todos os arquivos de origem Java sejam copiados:



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

Aqui, queremos que todos os arquivos Java do diretóriosrc/main/java e o arquivoserver.xml desrc/main/config/liberty, sejam copiados.

4.5. Instalando o Arquétipo

Agora que terminamos de colocar tudo junto, podemos instalar o arquétipo invocando este comando:

mvn install

Neste ponto, o arquétipo está registrado no arquivoarchetype-catalog.xml, localizado no repositório local Maven e, portanto, pronto para uso.

5. Usando o arquétipo instalado

The maven-archetype-plugin allows the user to create a Maven project through the generate goal and existing archetype. Para obter mais informações sobre este plugin, você pode visitar ohomepage.

Este comando usa este plugin para gerar um projeto Maven a partir do nosso arquétipo:

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

Devemos então passar o GAV de nosso arquétipo como argumentos para a metamaven-archetype-plugin:generate. Também podemos passar o GAV do projeto concreto que queremos gerar, caso contrário, podemos fornecê-los no modo interativo.

O projeto concretocool-jaxrs-sample gerado está, portanto, pronto para ser executado sem quaisquer alterações. Portanto, podemos executá-lo apenas invocando este comando:

mvn package liberty:run

Podemos então acessar este URL:

http://localhost:9080/cool-jaxrs-sample//ping

6. Conclusão

Neste artigo, mostramos como construir e usar um arquétipo Maven.

Demonstramos como criar o arquétipo e, em seguida, como configurar os recursos do modelo por meio do arquivoarchetype-metadata.xml.

O código, como de costume, pode ser encontradoover on Github.