7 de mar de 2011

Ciclo de Vida de Construção de um projeto Maven

Maven é baseado no conceito de ciclo de vida de projeto. Isto significa dizer que o processo para construção de um determinado artefato é claramente definido.

Para a construção de um projeto específico é necessário aprender uma lista de comandos e o Maven, através das definições do POM, será responsável por gerar os artefatos conforme desejado.

Existem 3 tipos de ciclo de vida de construção do projeto: default, clean e site. O default trabalha com o a construção dos artefatos desde a criação até a instalação. O clean é responsável pela limpeza de todos os arquivos gerados no ciclo default. O ciclo site é responsável pela criação da documentação do projeto.

O Ciclo de Vida do Projeto é divido em fases


Cada um dos ciclos acima explicados são definidos por um grupo diferente de fases, onde cada fase representa um estágio no ciclo de vida do projeto.

Por exemplo, o ciclo default possui as seguintes fases:

  • validate - valida se o projeto está correto e se todas as informações necessárias estão disponíveis
  • compile - compila o código fonte do projeto
  • test -  testa o código compilado usando uma framework de testes. Estes testes não necessitam do código fonte.
  • package - reúne o código compilado e empacota em algum formato especificado, por exemplo, um jar ou um war.
  • integration-test - integration-test - processa e instala o pacote caso seja necessário em um ambiente onde os testes serão executados.
  • verify - executa algumas verificações para identificar se o pacote é válido e se atende os critérios de qualidade
  • install - instala o pacote em um repositório local, para ser usado como uma dependência em outros projetos locais.
  • deploy - realizado em um ambiente de integração ou distribuição, copia o pacote  para um repositório remoto para compartilhamento com outros desenvolvedores ou projetos.
Estas fases de construção(levando em consideração que existem outras fases ainda não mencionadas) são executadas de forma seqüencial até completar todo o ciclo de vida default. Isto significa que o Maven irá primeiro validar o projeto, após irá compilar os códigos-fonte, executar os testes, empacotar os arquivos binários(caso seja um jar), executar os testes de integração, verificar o pacote, instalar o pacote verificado para o repositório local e distribuir o pacote instalado em um ambiente específico.

Para executar todos os passos acima é necessário apenas solicitar a execução da última fase especificada, ou seja, deploy: mvn deploy.


Caso execute o comando mvn install as seguintes fases serão executadas, validate, compile, package etc.


Também existem casos onde é necessário executar mais de um comando para vários módulos( um bom exemplo é um projeto com sub-projetos). Por exemplo, podemos executar mvn clean install. Este comando irá verificar todos os sub-projetos e executar os comandos clean e depois install(incluindo todos os passos necessários).


Uma fase de construção é composta de metas


Embora que uma fase de construção seja responsável por um passo específico no ciclo de vida do projeto, a maneira a qual trata suas responsabilidades podem variar. Esta execução é feita através da declaração de metas para cada fase.


Uma meta(goal) representa uma tarefa específica(entre várias tarefas existentes na fase) a qual contribue para a construção e gerenciamento do projeto. Estas fases podem estar ligadas nenhuma ou muitas fases de construção. Uma tarefa que não está associada a nenhuma fase pode ser executada fora do ciclo de vida  apenas por sua invocação direta. A ordem de execução depende da ordem a qual a tarefa(s) e as fase(s) de construção serão invocadas. Por exemplo, considere o exemplo abaixo. Os argumentos clean e package são fases de construção enquanto dependency:copy-dependencies é uma meta(ou tarefa).

mvn clean dependency:copy-dependencies package


Caso este comando for executado, a fase clean será executada primeiro(executando todas as tarefas precedentes ao ciclo clean do projeto até a própria fase clean), e depois, a meta dependency:copy-dependencies e, finalmente, executando a fase package(representando todas as fases precedentes ao ciclo default do projeto).



Alem disso, se uma meta está associada a nenhuma ou várias fases, a meta será invocada em todas as fases.



A fase de construção pode ter nenhuma ou algumas metas para completá-la. Caso uma fase não possua tarefas para ser executada a fase não será executada. Caso existam uma ou mais tarefas a serem completadas, todas as tarefas serão executadas.
Pesquisa personalizada

0 comentários:

Postar um comentário

Leia as regras:
Todos os comentários são lidos e moderados previamente.
Apenas os que respeitam as regras abaixo serão publicados:
- o comentário deve estar relacionado ao assunto do post
- não serão aceitos palavrões e ofensas ao redator do blog ou a terceiros
- não inclua links desnecessários no conteúdo do comentário
- se quiser deixar sua url, comente com a opção OpenId
Obs.: os comentários dos leitores não refletem a opnião do blog.