Maven

Fonte: Wikiversidade

Definição[editar | editar código-fonte]

De acordo com o sítio do Apache Maven, ele é uma ferramenta de gerenciamento e compreensão de projetos de software. Com base no conceito de um modelo de objeto de projeto (POM), o Maven pode gerenciar a compilação, o relatório e a documentação de um projeto a partir de uma informação central.[1]

História[editar | editar código-fonte]

Maven, uma palavra iídiche que significa acumulador de conhecimento, foi originalmente iniciado como uma tentativa de simplificar os processos de construção no projeto Jakarta Turbine. Ele surgiu a partir da necessidade que os desenvolvedores tinham de uma melhor organização do projeto. Segundo relatos sobre a origem da ferramenta, havia vários projetos cada um com seus próprios arquivos de compilação Ant que eram todos ligeiramente diferentes e JARs foram verificados no CVS. Os desenvolvedores queriam uma maneira padrão de construir os projetos, uma definição clara do que o projeto consistia, uma maneira fácil de publicar informações do projeto e uma maneira de compartilhar JARs em vários projetos.

O resultado é uma ferramenta que agora pode ser usada para criar e gerenciar qualquer projeto baseado em Java. Esperamos ter criado algo que facilite o trabalho diário dos desenvolvedores Java e, geralmente, ajude na compreensão de qualquer projeto baseado em Java.[2]

Objetivos[2][editar | editar código-fonte]

O objetivo principal do Maven é permitir que um desenvolvedor compreenda o estado completo de um esforço de desenvolvimento no menor período de tempo. Para alcançar este objetivo, existem várias áreas de preocupação que Maven tenta lidar com:

  • Tornar o processo de construção mais fácil
  • Fornecer um sistema de construção uniforme
  • Fornecer informações sobre projetos de qualidade
  • Fornecer diretrizes para o desenvolvimento de melhores práticas
  • Permitir migração transparente para novos recursos

Motivos para usar Maven[3][editar | editar código-fonte]

10. Build: O Maven vai fazer o build de sua solução. Ele utiliza muito o conceito de convenção sobre configuração. Logo, se você colocar seus artefatos nas estruturas padrão do Maven, não será necessário configurar várias coisas que você configuraria com ant como o diretório de fontes, os recursos e para onde será gerado os binários.

9. Build Modular: No Maven os projetos são estruturados de forma modular. Quando eu faço o build no pai, ele faz o build para cada filho, isso é muito útil. Assim, não preciso recompilar todos os módulos, ou quando eu quero isso não preciso fazer um a um.

8. Cascateamento: Outra grande feature do Maven é o cascateamento de configurações. Graças a sua estrutura de hierarquias de POM. Desta forma eu não duplico configurações e todo o projeto filho de um POM herda todas as suas configurações. Com isso é possível fazer um balanceamento de configurações.

7. Plugins: No Maven tudo são plugins. O próprio core do Maven é feito de plugins, que vão desde o que faz o *clean* ao que gera o Javadoc ou o que gera estatísticas da qualidade do seu projeto. Além de existirem muitos plugins para o Maven, você ainda pode criar o seu próprio.

6. Gerência de Dependências: Quem já não ouviu falar do *jar hell*? Quando usamos muitos frameworks em Java através de vários projetos, gerenciar esses artefatos e

controlar as suas versões é um verdadeiro inferno. O Maven provê a gerência de jar, bem como de plugins. Esses artefatos não ficam em controle de versão. Isso mesmo, você não cria uma pasta *lib* e coloca os jars lá dentro, eles ficam no repositório local do Maven.

5. Consistência: No Maven tudo é igual, você faz todas as parametrizações através do arquivo pom.xml e tudo da mesma forma. E tem mais: o que você faz em um

projeto pode ser aproveitado em outro, aproveitando mesmo, que é diferente de copiar e colar.

4. Contexto e Informações: Com o Maven é possível ter de forma contextualizada as informações úteis do projeto. Ele pode gerar um site contendo:

  • Lista de Desenvolvedores
  • Links para o controle de versão
  • Links para o sistema de build contínuo
  • Links para o sistema de issue tracking
  • Lista de discussão
  • Dependências do projeto
  • Resultado da execução dos testes
  • Javadoc e documentação

E muito, muito mais. Pois tudo isso pode ser customizado e parametrizado. Tudo isso pode ser coletado e condensado no site de forma automática no Maven.

3. Ciclo de Vida: Diferente do ant, o Maven tem todo um ciclo de vida definido. Assim, à medida que algo vai acontecendo e ele vai mudando de estados no ciclo

de vida, determinados plugins (goals) serão executados. Você pode parametrizar o que você quer que aconteça em cada momento do ciclo de vida do Maven.

2. Foco na Qualidade: O Maven incentiva que se criem testes unitários. De forma que quando você faz o build ou gera um deploy em um servidor, ele roda todos os testes unitários. Caso algum teste unitário falhe, ele aborda o build/deploy. Essa é uma excelente política para forçar os testes e a qualidade de software.

1. Automatização: Foi complicado escolher qual seria a maior vantagem do Maven, então vou falar aqui de duas coisas. Primeiro, da automatização: com o Maven você atinge rapidamente um nível de automatização muito alto e com pouquíssima configuração. Essa automatização se reflete no processo de release de um versão do seu software que fica muito, mas muito mais simples com o Maven.

O outro ponto é a soma de tudo. O Todo do Maven é maior que a soma de suas partes, porque com tudo isso temos uma solução de gerência de configurações. De forma que o desenvolvedor novo senta na cadeira e, com um comando, o Maven baixa as dependências necessárias, roda os testes, configura o ambiente, baixa o servidor de aplicação, faz o deploy e abre o browser com a tela de login do sistema, tudo isso com um comando do Maven.

Download[editar | editar código-fonte]

O Maven pode ser obtido através do aqui, diretamente no site da Apache.

Instalação[4][editar | editar código-fonte]

Após o download, a instalação do Apache Maven é um processo simples de extrair o arquivo e adicionar a pasta bin com o comando mvn no PATH do Windows.

As etapas são:

  1. Confirmar se a variável de ambiente JAVA_HOME está definida e aponta para a instalação do JDK
  2. Extrair arquivo de distribuição em qualquer diretório
unzip apache-maven-3.3.9-bin.zip

ou

tar xzvf apache-maven-3.3.9-bin.tar.gz

De forma alternativa, você pode usar a ferramenta de extração de arquivos preferida.

3. Adicione o diretório bin do diretório criado apache-maven-3.3.9 para a variável de ambiente PATH.

4. Confirme com mvn -v em um novo shell. O resultado deve ser semelhante ao mostrado a seguir:

Apache Maven 3.3.3 (7994120775791599e205a5524ec3e0dfe41d4a06; 2015-04-22T04:57:37-07:00)
Maven home: /opt/apache-maven-3.3.3
Java version: 1.8.0_45, vendor: Oracle Corporation
Java home: /Library/Java/JavaVirtualMachines/jdk1.8.0_45.jdk/Contents/Home/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "mac os x", version: "10.8.5", arch: "x86_64", family: "mac"

No Windows[editar | editar código-fonte]

Verifique o valor da variável de ambiente:

echo %JAVA_HOME% 
C:\Program Files\Java\jdk1.7.0_51

Adicionando o caminho ao PATH: Adicione o diretório bin da distribuição descompactada à variável de ambiente PATH do usuário abrindo as propriedades do sistema (WinKey + Pause), selecionando a guia "Avançado" e o botão "Variáveis de Ambiente", adicionando ou selecionando a variável PATH nas variáveis do usuário com o valor C:\ Arquivos de programas\apache-maven-3.3.9\bin. A mesma caixa de diálogo pode ser usada para definir JAVA_HOME para o local de seu JDK, exemplo: C:\Arquivos de Programas\Java\jdk1.7.0_51

Abra um novo prompt de comando (Winkey + R digite cmd) e execute mvn -v para verificar a instalação.

Em Sistemas Unix (Linux, Solaris e Mac OS X)[editar | editar código-fonte]

Verificar o valor das variáveis de ambiente:

echo $JAVA_HOME
/Library/Java/JavaVirtualMachines/jdk1.8.0_45.jdk/Contents/Home

Adicionando o caminho ao PATH:

export PATH=/opt/apache-maven-3.3.9/bin:$PATH

Exemplo[5][editar | editar código-fonte]

Projetos Maven são configurados usando um Project Object Model, que é armazenado em um arquivo pom.xml. A seguir está um exemplo mínimo:

<project>
  <!-- model version is always 4.0.0 for Maven 2.x POMs -->
  <modelVersion>4.0.0</modelVersion>

  <!-- project coordinates, i.e. a group of values which
       uniquely identify this project -->

  <groupId>com.mycompany.app</groupId>
  <artifactId>my-app</artifactId>
  <version>1.0</version>

  <!-- library dependencies -->

  <dependencies>
    <dependency>

      <!-- coordinates of the required library -->

      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>

      <!-- this dependency is only used for running and compiling tests -->

      <scope>test</scope>

    </dependency>
  </dependencies>
</project>

Plugins[editar | editar código-fonte]

A maioria das funcionalidades do Maven está em plugins. Um plugin fornece um conjunto de objetivos que podem ser executados usando a seguinte sintaxe:

 mvn [plugin-name]:[goal-name]

Por exemplo, um projeto Java pode ser compilado com o objetivo de compilador do plugin de compilador, através da execução de mvn compiler:compile.

Ciclos de vida de construção[editar | editar código-fonte]

Ciclo de vida de construção é uma lista de fases nomeadas que podem ser usadas para dar ordem ao objetivo de execução. Um dos ciclos de vida padrão do Maven é o default lifecycle, que inclui as seguintes fases, nesta ordem:

1. process-resources (processar recursos)
2. compile (compilar)
3. process-test-resources (processar recursos de teste)
4. test-compile (testar compilação)
5. test (testar)
6. package (empacotar)
7. install (instalar)
8. deploy (implantar)

Criando um projeto[editar | editar código-fonte]

Comando para criar um projeto Maven.

mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

Estrutura de diretórios:

my-app
|-- pom.xml
`-- src
    |-- main
    |   `-- java
    |       `-- com
    |           `-- mycompany
    |               `-- app
    |                   `-- App.java
    `-- test
        `-- java
            `-- com
                `-- mycompany
                    `-- app
                        `-- AppTest.java

Referências[editar | editar código-fonte]

  1. https://maven.apache.org/
  2. 2,0 2,1 https://maven.apache.org/what-is-maven.html
  3. https://imasters.com.br/artigo/12336/java/dez-motivos-para-voce-usar-maven/?trace=1519021197&source=single
  4. https://maven.apache.org/install.html
  5. https://pt.wikipedia.org/wiki/Apache_Maven