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.