sábado, 18 de dezembro de 2010

Hands-on: Dependency Management com Maven - Parte 1

"E disse: Maven, a vida é pra valer..."

Neste post, listarei algumas vantagens de se usar o maven em projetos Java - todas de situações que já vivenciei na pele, e que o Maven resolve com agilidade e elegância. No final, segue uma série de screenshots mostrando desde a instalação do Maven no Eclipse, à criação de um projeto e à configuração de algumas dependências.

Happy Maven!

A parte 2 está disponível aqui.

Por que usar Maven?

  • Organização da Aplicação: layout-padrão amplamente aceito entre desenvolvedores
    • classes principais em src/main/java
    • classes de teste em src/test/java
    • arquivos de configuração e recursos em src/main/resources e src/test/resources
    • arquivos de aplicações web (html, jsps, css, etc) em src/main/webapp
  • Baixar e configurar automaticamente as dependências do projeto
    • bibliotecas (jars)
    • os javadocs das dependências, úteis para recursos como auto-complete das IDEs
    • os códigos-fonte das dependências, úteis para debug
  • Configuração de Builds da Aplicação
    • Possui tarefas para compilar (mvn:compile), testar (mvn:test) e empacotar (mvn:package) a aplicação.
    • Build pode ser customizado (mvn:build)
  • Versionamento de código
    • Não coloca jars no controle de versão: Menor tamanho-util do projeto no SCM
    • O pom.xml armazena o histório de dependências
      • Se num determinado branch é usado GWT 1.7, e em outro branch é feito o upgrade para o GWT 2.0
      • Como o pom.xml é versionado, ao migrar entre os branches, o Maven saberá exatamente qual versão da dependência utilizar
  • Trabalho em equipes / Configurações de SO e IDE
    • Versionamento de configurações de IDE são muito frágeis
      • Atreladas ao Sistema Operacional (por exemplo, localização de bibliotecas no filesystem)
      • Atreladas à versão da IDE (pode dar conflito quando são usadas versões diferentes da mesma IDE)
      • Atreladas à IDE (impede que o desenvolvedor utilize sua IDE favorita)
    • Como o Maven pode ser utilizado independente de SO, IDE ou versão da IDE, ele resolve também estes problemas.

ATENÇÃO

Quando mal-configurado, faz "backup da internet inteira no seu micro" - culpa de quem o configurou!

Hands On

Instalar Plugin Maven no Eclipse

Help > Install new software

Digitar o update site do Maven e clicar em Add...

Fornecer um nome para o Repositório Maven (neste caso, M2E)

Selecionar o plugin para a instalação

Em seguida, basta aceitar a Licença de Uso do Maven, aguardar o download e instalação do plugin M2E e reiniciar o Eclipse.


Criar projeto Maven

Após reiniciar o Eclipse, vamos criar um projeto Maven

Ao tentar criar o projeto, o plugin M2E alerta que o Eclipse precisa estar rodando sobre uma JDK. Por padrão, o Eclipse roda sobre a JRE default do sistema, que é simplesmente uma Máquina Virtual Java. O Maven, porém, depende de bibliotecas do Kit de Desenvolvimento Java (JDK) para funcionar. 

Caso ainda não tenha feito, instale uma JDK em sua máquina (por exemplo OpenJDK ou a Oracle JDK), e siga os passos abaixo para o plugin M2E funcionar.

Configurando JDK para o Maven

JRE nas Preferências do Eclipse

Window > Preferences

Java > Installed JREs (note que o Eclipse está usando a jre6 por default). Selecione a jre6 e clique em Editar.

Altere a propriedade JRE home para o diretório onde sua SDK foi instalada, e a propriedade JRE name para jdk6 (ou outro de sua preferência).

Pronto, agora o Eclipse está configurado para usar a Máquina virtual da JDK ao invés da JRE padrão.

Parâmetro -vm no eclipse.ini

Resta apenas alterar a Máquina Virtual sobre a qual o Eclipse é inicializado, o que é feito no arquivo eclipse.ini. localizado no diretório do Eclipse.

Adicione, no início do arquivo, o parâmetro -vm, apontando para a localização do executável javaw.exe que existe no diretório bin da instalação da JDK.

Criar projeto Maven (continuação)

Ao tentar criar o projeto Maven novamente, a mensagem de erro do Maven rodar sobre JDK não mais deve aparecer, e a sequência é ilustrada pelas telas abaixo.

Na tela seguinte, marque a checkbox "Create a simple project", pois neste primeiro momento, não queremos trabalhar com nenhum arquétipo do Maven.

Ao prosseguir, é necessário informar os dados do projeto. Em Group Id, é uma boa prática colocar o nome do pacote do projeto, em Artifact Id, o nome do Projeto. Por enquanto, deixe as demais opções como estão e clique em Finalizar.


Resultado:

Note que o projeto criado pelo Maven foi configurado, por padrão, para usar um ambiente de execução Java 5. Isto pode ser consertado com alguns passos simples:

Clique com o botão direito sobre o nome da JRE do projeto, e selecione a opção Configure Build Path

Selecione a JRE e clique no botão Edit

Marque a opção "Workspace default JRE" ao invés de "Execution Environment / J2SE5"

Layout final do Projeto e o arquivo POM (Project Object Model)

Agora, com o projeto corretamente configurado, abra o arquivo pom.xml. Trata-se de um arquivo xml onde são feitas as configurações do projeto. O Eclipse possui editores visuais que facilitam a edição deste arquivo, evitando que tenha que escrever xml "à mão". O arquivo xml pode ser editado diretamente, na aba pom.xml, mas para este tutorial, usaremos os recursos visuais que o Eclipse oferece.



Adicionando algumas dependências no Projeto

Como em próximos artigos pretendo abordar o desenvolvimento de projetos GWT usando Maven, simularei a adição das bibliotecas gwt-user e gwt-servlet no projeto. O mesmo conceito é válido para adicionar a maioria das bibliotecas existentes, como Spring, Hibernate, Guice, Struts, etc... Na aba Dependency, clique em Add.

Digite o nome da biblioteca que deseja localizar. Note que o Eclipse exibe o resultado da pesquisa exibindo o groupId (com.google,gwt) e o artifactId (gwt-user) do artefato localizado. Note também que, por padrão, o Eclipse realiza pesquisa de dependências no repositório central do maven (http://repo1.maven.org/).


É possível configurar o Eclipse para pesquisar dependências em outros repositórios - por exemplo https://repository.jboss.org/nexus/content/groups/public/. Para tal, é necessário configurar um arquivo MAVEN_HOME/settings.xml (isso será abordado em um outro artigo).

Importamos também a biblioteca GWT-Servlet:

Depois de adicionar as dependências e salvar o arquivo pom.xml, o plugin do Maven se encarrega de baixar as dependências e configurar o Build Path da aplicação.

Pronto! O projeto está configurado, e as bibliotecas do GWT disponíveis para desenvolvimento.
Note, ao lado das bibliotecas em Maven Dependencies, que o plugin do Maven as salvou no diretório HOME do usuário, em um subdiretório .m2. Este será o repositório de bibliotecas que o Maven utilizará para gerenciar as dependências dos projetos.

Por agora é só, espero que este tutorial seja esclarecedor e motive a utilizar essa ferramente poderosa que é o Maven!

3 comentários: