Esse artigo faz parte da revista Java Magazine edição 36. Clique aqui para ler todos os artigos desta edição

ht=34 alt=imagem_pdf.jpg src="/imagens/imagem_pdf.jpg" width=34 border=0>

Migrando para o Maven 2

Dicas práticas de migração do Maven 1 para o Maven 2

Saiba como aproveitar as novas características do Maven 2, migrando o seu projeto Maven 1 para esta versão.

Dário Oliveros e José Marcelo Santuci

Na edição anterior, no artigo “Maven 2 Essencial”, exploramos os principais conceitos e funcionalidades da nova versão do Apache Maven, destacando o novo gerenciamento de dependências, o surgimento de um ciclo de vida bem definido, repositórios hierárquicos e o download automático de plug-ins. Não foram abordadas, entretanto, as diferenças relacionadas à versão 1, que vão desde a simples incorporação de novas funcionalidades até mudanças estruturais, como por exemplo, a reestruturação do arquivo de projeto (POM), a nova hierarquia padrão de diretórios e o fim do suporte a Jelly.

Após uma análise inicial da versão 2, pode-se ter a impressão de que a migração é trabalhosa e custosa, principalmente quando há um grande número de projetos usando Maven 1. Mas isso pode ser contornado fazendo a migração de forma gradual, e seguindo algumas dicas apresentadas neste artigo, que objetivam atenuar possíveis problemas e reduzir o esforço de migração.

Convidamos o leitor a conhecer as motivações que levam a esta migração e também estratégias de como migrar, passo a passo e através de um exemplo prático, projetos Maven 1 para Maven 2, de modo que ambas as versões possam conviver durante o período de transição. A estratégia adotada neste artigo foi baseada em uma das palestras ocorridas no JavaZone 2005 e conferida por um dos membros do Maven 2. Adotamos tal estratégia em alguns projetos internos, incorporando a ela pontos não tratados e detalhes e dicas observados por nós na prática.

Além de mostrar os detalhes da migração, este artigo permite que se conheça mais sobre o uso do Maven em projetos Java EE e demonstra os principais recursos da ferramenta sendo aplicados na prática.

Por que migrar para o Maven 2?

A migração para o Maven 2 pode ser encarada como uma tendência natural, pois é nesta nova versão que estão sendo concentrados os esforços atualmente. Isto não significa, porém, que o suporte às primeiras versões deixará de existir. Pelo contrário, a linha 1.x continuará sendo mantida para aqueles que optarem pela não migração, embora não haja previsões para se incorporar a ela novas funcionalidades significativas.

As vantagens do Maven 2 são muitas e são um convite quase irresistível para que o processo de migração ocorra. Veja algumas:

·         Menor e mais rápido – com apenas 1MB, o Maven 2 possui poucas dependências e pode ser incorporado a outras ferramentas

·         Ciclo de vida de build bem definido

·         Suporte a dependências transitivas

·         Estrutura hierárquica de repositório e definição de um padrão para a estrutura de diretórios

·         Transparência no tratamento de multiprojetos

·         Download automático de plug-ins

·         Melhoria no tratamento de Snapshots

·         Rápida criação de novos projetos com o uso de archetypes

·         Extensibilidade melhorada via plug-ins em Java e independência da linguagem Jelly para construção de plug-ins e/ou customização de builds

·         Simplificação da configuração com o fim de arquivos de propriedades (project.properties e build.properties)

 

É importante ressaltar que a decisão por migrar vai depender das características de cada projeto. Para projetos que possuem muita customização via o arquivo maven.xml (não mais usado no Maven 2), ou que utilizam uma grande variedade de plug-ins, é preciso antes analisar a real necessidade da migração e o esforço para adaptar o projeto ao Maven 2. Deve-se também verificar se todos os plug-ins usados já foram devidamente migrados para a nova versão.

Para obter mais informações sobre os plug-ins disponíveis, visite docs.codehaus.org/display/MAVEN/Maven+Plugin+Matrix. Esta página apresenta uma matriz comparando a disponibilidade em ambas as versões do Maven, o estágio atual e a existência de documentação.

Projeto-exemplo

Vamos ilustrar o processo de migração através de um exemplo prático. Usaremos neste artigo um projeto Java EE construído sob a versão 1 do Maven, que contém diferentes tipos de artefatos (jar, ejb-jar, war e ear), sendo cada um deles representado e gerado por um subprojeto.

Além disso, o projeto pressupõe o uso da ferramenta XDoclet para geração de interfaces e descritores, e a utilização do servidor de aplicações JBoss (ambas são ferramentas muito usadas em projetos Java EE e tornam os exemplos mais concretos). Veja a estrutura do projeto na Figura 1. O código-fonte do projeto-exemplo, antes e depois da migração, está disponível para download no site da Java Magazine.

 

image002.jpg
Figura 1
. Estrutura do projeto-exemplo

A relação de dependência entre os subprojetos é ilustrada na Figura 2. O projeto principal, projeto-exemplo, mantém as configurações básicas e aplicáveis a todos os subprojetos.

 

image004.jpg
Figura 2
. Relação entre os subprojetos

A migração passo a passo

Uma questão que pode surgir antes de iniciar a migração é se existe a possibilidade de migrar um projeto mantendo a coexistência com o original. A resposta é sim: como os nomes de arquivos de configuração do Maven 2 e do executável diferem da versão 1, é possível estabelecer builds em paralelo, mantendo as configurações originais de ambos os projetos.

Veja algumas das diferenças entre as duas versões na Tabela 1. Apresentaremos a seguir os passos para a migração do projeto de exemplo, do Maven 1 para o Maven 2.

 

 

Maven 1

Maven 2

Executável

Maven

mvn

Configuração

de build

project.xml

Definição do POM

pom.xml

Definição do POM

maven.xml

Customização de build

project.properties

Configuração geral de build

settings.xml

Configuração local

build.properties

Configuração local de build

Tabela 1. Diferenças entre os arquivos do Maven 1 e 2

Arquivo de projeto

O primeiro passo é ajustar o arquivo de projeto de uma versão para outra. Também conhecido como POM (Project Object Model), este arquivo teve o seu nome alterado de project.xml para pom.xml. Por este motivo, é possível que ambos os arquivos (e conseqüentemente ambas as versões de projetos Maven) coexistam sob uma mesma estrutura de diretórios, sem ocasionar qualquer conflito de build.

Adotaremos como estratégia, então, criar o pom.xml de cada módulo a partir do respectivo project.xml (veja a Figura 3) e efetuar as mudanças necessárias gradualmente, em cada passo da migração. Alterações comuns a todos os projetos, entretanto, serão detalhadas neste tópico.

 

image006.jpg
Figura 3
. Surgimento do novo arquivo de projeto do Maven 2

 

Esta etapa é simples e direta, visto que o project.xml é praticamente um subconjunto do pom.xml. Veja nas Listagens 1 e 2 a similaridade entre ambos. Apesar de algumas tags terem mudado de nome, os conteúdos mantiveram-se praticamente inalterados.

Para migrar nosso projeto, devemos então alterar o conteúdo de todos os arquivos pom.xml (copiados e renomeados a partir dos project.xml), conforme os passos a seguir:

1.     Substituir <pomVersion> por <modelVersion> e alterar o seu valor para 4.0.0

2.     Alterar o valor de <groupId> para br.com.jm.mm2. Este valor é adotado para representar a estrutura hierárquica do repositório do projeto-exemplo.

...

Quer ler esse conteúdo completo? Tenha acesso completo