Tutorial Maven - Introdução

Hoje começo uma série de posts sobre o Maven! Neles eu vou mostrar um pouco do que eu sei sobre a ferramenta, como usar, quando usar, boas práticas e mostrar alguns plugins que podem ser úteis para a nossa vida de desenvolvedor. As aulas serão gradativas, então é bom começar por esse post. Vamos construir uma aplicação web simples, as tecnologias envolvidas no código dela não serão relevantes no decorrer dos posts. O código fonte das aulas se encontra em github.com/diogomoreira/tutorial-maven. Vou tentar explicar ao máximo cada trecho de código. Caso apareça alguma dúvida, não hesitem em comentar neste post ou no próprio Github. Então, vamos lá!

O que é Maven?

O Maven (que significa acumulador de conhecimentos) é uma ferramenta de automação de build e gerenciamento de projetos em Java. Imagine um projeto com milhões de mini-projetos/módulos. Como gerenciar todos para que compilem, sejam testados e gerem seus artefatos várias vezes durante o desenvolvimento? O Maven é a ferramenta para realizar tudo isso! Ele cria um padrão para compilação dos projetos, permite o compartilhamento dos artefatos (.jar, .war e outros) entre os projetos, executa os testes necessários além de muitas outras funcionalidades. Em um primeiro momento você pode dizer:

Qual a vantagem de uma ferramenta que faz o que a minha IDE já faz?

Acho que esse é o ponto onde muita gente para e não se interessam pelo Maven. Vamos citar só alguns pontos do porque usar Maven.

  • Independência de IDE. Projetos criados diretamente com o modelo de build da IDE são "amarrados" a essa mesma IDE. Um projeto no Netbeans não consegue ser lido no Eclipse, embora o contrário seja possível. Projetos criados pelo Maven são independentes de IDE, de forma que o mesmo projeto pode ser importado no Eclipse, no Netbens, no Intellij IDEA ou qualquer outra IDE que entenda o modo como o Maven trabalha. Isso já seria motivo suficiente para usarmos essa ferramenta nos nossos projetos, afinal, nunca estamos trabalhando sozinhos no mesmo código.
  • Uso de plugins. O uso de plugins no Maven pode lhe ajudar com várias tarefas como rodar toda a suite de testes unitários, gerar documentação, verificar estilo de código dentre outras atividades.
  • Gerência de dependências. Imagina toda vez que alguém tiver que modificar alguma coisa no seu código você ter que passar 100+ jars? Com o maven o seu projeto fica leve, o que define as dependências é apenas um arquivo xml. Desse modo seu projeto fica muito mais "portável".

Mas ainda tem muito mais. O assunto pode parecer ser meio chato ou desnecessário no começo, mas garanto que após usar o Maven pela primeira vez você nunca mais vai construir um projeto sem usá-lo.

Instalação do Maven

Antes de começar a instalação do Maven, certifique-se que tem o Java instalado na sua máquina. Não tem? Veja aqui.

Windows

Baixe o executável do Maven aqui. Não é necessário instalar nada, apenas extraia o arquivo em uma pasta conhecida. Após extrair, precisamos configurar o caminho do Maven dentro das variáveis de ambiente do Windows.

  • Entre na tela de Propriedades do Sistema (Winkey + Pause ou no Painel de Controle > Sistema), vá para a aba "Avançado" e clique em "Variáveis de ambiente";
  • Nas variáveis de usuário adicione uma variável chamada M2_HOME contendo o caminho da pasta que você descompactou o Maven. (Ex: D:\apache-maven-3.1.1);
  • Em seguida adicione uma variável nomeada M2 com o mesmo valor anterior e a adição de "\bin" ao final. (Ex: D:\apache-maven-3.1.1\bin);
  • Agora nas variáveis de sistema, edite a variável "Path" e adicione "%M2%" ao final dela.

E pronto! O Maven já está instalado na sua máquina.

Ubuntu

No terminal, rode o comando abaixo para obter os pacotes do Maven disponíveis

apt-cache search maven

Após a execução do comando anterior, execute

sudo apt-get install maven

E pronto! O Maven já está instalado na sua máquina.

Para testar a instalação do Maven tanto no Windows quanto no Ubuntu, rode o seguindo comando no seu terminal:

mvn --version

Agora que já temos o Maven devidamente instalado na máquina podemos partir para os próximo passo desse tutorial: criar um projeto simples.

Criando o projeto

Antes de criar o primeiro projeto, vamos aprender um conceito simples mas que é muito importante para nossos projetos com Maven: o archetype. Os archetypes no Maven são, em resumo, “templates” para os nosso projetos. Quando criamos um projeto web no Netbeans ou Eclipse por exemplo, ele cria uma estrutura padrão para esse tipo de projeto com algumas pastas padrões: “web” no caso do Netbeans, “WebContent” no caso do Eclipse. É isso que o Maven faz, cria um projeto de acordo com o “template”, ou seja, nosso archetype. Por hora é o que precisamos entender. Os seguintes conceitos serão de extrema importância daqui pra frente:

  • groupId: É o que vai identificar o seu projeto entre os demais projetos que você estará trabalhando. Deve seguir a nomenclatura de pacotes que você vai usar, geralmente usamos nomes de domínio que temos posse. (veja What is the significance of the reverse domain name for java package structure)
  • artifactId: É o nome do seu artefato. O seu jar, por exemplo. Tome como referência o Primefaces ou outro framework qualquer. Ao fazer o download do jar, temos um arquivo primefaces-4.0.jar. O artifactId seria o nome "primefaces".
  • version: É a versão do seu artefato. Por exemplo: 1.0, 1.1, 1.1.1 e etc.

Agora vamos criar nosso projeto. No terminal, rode o seguinte comando:

mvn archetype:generate -DgroupId=com.diogodmoreira
			-DartifactId=tutorial-maven
			-DarchetypeArtifactId=maven-archetype-quickstart
			-DinteractiveMode=false

(Nota: o -D denomina um parâmetro, todo o comando deve ser rodado em apenas uma linha, a apresentação dele aqui é apenas para facilitar a leitura)

Após a execução desse comando, você pode perceber que foi criado um diretório com o nome de tutorial-maven. Explicando o que esse comando fez: pedimos ao maven para gerar um projeto seguindo um archetype (mvn archetype:generate), passamos alguns dados relativos ao nosso projeto como groupId e artifactId (entenderemos isso mais a frente), definimos qual o archetype a ser usado (-DarchetypeArtifactId=maven-archetype-quickstart) e informamos para não entrar em modo interativo (não pedir dados ao usuário durante a execução do comando).

Neste ponto, a estrutura do nosso projeto está construída, e agora já poderíamos começar a codificar nossa aplicação. Perceba que temos uma pasta chamada “src”, e é nela que vamos guardar o código-fonte da nossa aplicação. O Maven por padrão separa dois espaços na nossa aplicação: main e test, a primeira para o código de produção e o segundo para os nossos testes. Note que já temos pacotes criados (com.diogodmoreira) com uma classe (App.java) apenas para demonstrar onde devemos começar a inserir nosso código. Esses pacotes são criados de acordo com o groupId que passamos como parâmetro na criação do nosso projeto. Vamos empacotar nosso projeto e testá-lo em seguida apenas para demonstrar como construir um pacote com o Maven. Execute o seguinte comando no seu terminal:

mvn package

Após uma sequência de logs, veja se apareceu a mensagem “BUILD SUCCESS” que indica que nosso projeto foi construido com sucesso. Vá até a pasta “target” dentro do projeto e você vai encontrar um arquivo chamado tutorial-maven-1.0-SNAPSHOT.jarVolte ao terminal e execute o comando:

java -cp tutorial-maven-1.0-SNAPSHOT.jar com.diogodmoreira.App

A saída deve ser o “Hello World” que está contido dentro do App.java que o Maven criou automaticamente. Pronto! Você criou um projeto no Maven pela primeira vez. Tente importar o seu projeto em outras IDEs e veja como o Maven continua construindo sua aplicação da mesma maneira, possibilitando que você use a IDE que desejar mesmo estando numa equipe que não utilize a IDE de sua preferência.

Nos próximos artigos vou explicar como adicionar dependências no seu projeto, como se utilizar de archetypes para tornar a estrutura inicial mais rápido entre outras vantagens do Maven. No começo pode ser difícil de enxergar o ganho que o Maven trás para o desenvolver, principalmente para quem ainda não o usa, mas ao passo dos próximos tutoriais você irá perceber como é essencial uma ferramenta desse tipo. Até os próximos artigos!


© 2018. All rights reserved.

Powered by Hydejack v7.5.0