Desenvolvido por | Apache Software Foundation |
---|---|
Primeira versão | 13 de julho de 2004 |
Última versão | 3.8.1 (4 de abril de 2021) |
Depósito | gitbox.apache.org/repos/asf/maven.git |
Escrito em | Java |
Sistema operacional | Multi plataforma |
Meio Ambiente | Máquina Virtual JAVA |
Modelo |
Gerente de pacotes do motor de produção |
Licença | Licença Apache versão 2.0 |
Local na rede Internet | maven.apache.org |
Apache Maven (comumente chamado de Maven ) é uma ferramenta para gerenciar e automatizar a produção de projetos de software Java em geral e Java EE em particular. É usado para automatizar a integração contínua durante o desenvolvimento do software. O Maven é gerenciado pela organização Apache Software Foundation . A ferramenta era anteriormente um ramo da organização do Projeto Jakarta .
O objetivo é produzir software a partir de suas fontes, otimizando as tarefas realizadas para esse fim e garantindo a correta ordem de produção.
Ele pode ser comparado ao sistema make no Unix ou à ferramenta Ant .
O Maven usa um paradigma conhecido como Project Object Model (POM) para descrever um projeto de software, suas dependências de módulos externos e a ordem a ser seguida para sua produção. Ele vem com um grande número de tarefas pré-definidas, como a compilação de código Java ou sua modularização.
Um elemento chave e relativamente específico do Maven é sua capacidade de funcionar como uma rede. Uma das motivações históricas desta ferramenta é fornecer um meio de sincronização de projetos independentes: publicação padronizada de informações, distribuição automática de módulos jar . Portanto, na versão básica, o Maven pode baixar dinamicamente o hardware de repositórios de software conhecidos. Assim, oferece sincronização transparente de módulos necessários.
Maven1 e Maven2 foram desenvolvidos em paralelo, mas as versões posteriores são baseadas na estrutura da segunda versão. As seguintes partes do artigo enfocam o Maven2. Uma versão 3 do Maven foi lançada em8 de outubro de 2010. O fim do suporte para a versão 2 foi registrado em18 de fevereiro de 2014.
Cada projeto ou subprojeto é configurado por um POM que contém as informações de que o Maven precisa para processar o projeto (nome do projeto, número da versão, dependências de outros projetos, bibliotecas necessárias para compilação, nomes de contribuidores, etc.). Este POM é materializado por um arquivo pom.xmlna raiz do projeto. Essa abordagem permite a herança de propriedades do projeto pai. Se uma propriedade é redefinida no POM do projeto, ela se sobrepõe àquela definida no projeto pai. Isso introduz o conceito de reutilização de configuração. O arquivo pom do projeto principal é denominado pom pai . Ele contém uma descrição detalhada do seu projeto, com informações específicas sobre controle de versão e gerenciamento de configuração, dependências, recursos do aplicativo, testes, membros da equipe, estrutura e muito mais.
O Maven impõe uma estrutura em árvore e uma nomenclatura dos arquivos do projeto de acordo com o conceito de Convenção ao invés de configuração . Essas convenções reduzem a configuração de projetos, desde que um projeto siga as convenções. Se um projeto precisa se desviar da convenção, o desenvolvedor especifica isso na configuração do projeto.
Aqui está uma lista não exaustiva dos diretórios de um projeto Maven:
Os objetivos ( metas em inglês) do ciclo de vida principal de um projeto Maven são:
A ideia é que, para qualquer objetivo, todos os objetivos anteriores devem ser executados, a menos que já tenham sido executados com êxito e nenhuma alteração tenha sido feita no projeto desde então. Por exemplo, ao executarmos mvn install, o Maven verificará se foi mvn packageconcluído com sucesso (o jar existe em target/), caso em que não será executado novamente.
Outros objetivos são executáveis fora do ciclo de vida e não fazem parte do ciclo de vida padrão do Maven (eles não são obrigatórios). Aqui estão os principais:
No entanto, eles podem ser adicionados ao ciclo de vida por meio do POM.
Na ferramenta Maven, o gerenciamento de dependências é baseado em dois conceitos:
A noção de relação transitiva é implementada para a relação "depende de" e todo o projeto Java.
Exemplo: Considere três projetos (A, B, C), se A depende de B e B depende de C, então A dependerá de C.
Por padrão no Maven, a transitividade é configurada como automática. Esta configuração pode gerar restrições com grandes projetos:
Enquanto se aguarda uma melhoria do plugin , esta opção pode ser desativada configurando a opção fornecida .
Outra contribuição da ferramenta Maven é a organização de projetos e plugins. O Maven possui vários repositórios em vários níveis. O objetivo do repositório é disponibilizar tanto os plugins usados ou planejados quanto os projetos gerados pelo Maven. É claro que você pode instalar projetos para usá-los (sem que sejam gerados pelo Maven). Existem três repositórios:
Para criar um repositório para a empresa (ou um repositório comum em geral), você pode usar os protocolos ftp, scp, file e http.
Nota: o plugin fornecido para o protocolo ftp pode representar um problema porque ainda não foi desenvolvido.
Para instalar um jar no repositório (sem que seja um projeto maven), você deve gerar o POM com ele. Caso contrário, o Maven tenta se conectar em diferentes repositórios para procurá-lo, portanto, uma verdadeira perda de tempo, pois o jar não deveria estar presente nesses repositórios.
Uma última observação importante: no repositório, há uma estrutura bem definida e imutável (que permite ao Maven encontrar seu caminho), onde jars e projetos são organizados de acordo com groupId, artifactId e versão.
Assim, uma vez que uma declaração é feita (dependência ou não), o Maven pesquisa no seguinte local:
{Localização do repositório} / groupId / artifactId / versão
Os nomes dos pacotes são os seguintes:
{artifactId} - {versão}. {pacote}
E ao contrário do diretório "target" onde podemos definir o nome do nosso pacote, não é permitido alterar os nomes ou a estrutura dos pacotes sob pena de não reconhecimento do pacote e portanto de "BUILD FAILED".
Os relatórios gerados pelo Maven incluem:
Os plugins permitem a adição de funcionalidades. Esses plug-ins estão disponíveis no site do Maven ou, na sua falta, podem ser desenvolvidos. Para usar um plugin, basta declará-lo no POM.
Observe que a declaração é herdada por padrão. A declaração é feita de forma simples: groupId (se nenhum for declarado, ele pega o org.apache.maven padrão), artifactId e possivelmente a versão (caso contrário, a última versão é usada).
Após esta declaração, ao lançar uma tarefa, o Maven verifica sua presença no repositório local. Se não conseguir encontrar o plugin, ele se conecta ao repositório central para baixá-lo. Em caso de falha de recuperação, termina-se a execução com uma mensagem de erro (pode-se evitar e pedir ao Maven para continuar e dar o resultado do tratamento - com as mensagens de erro - no final).
O Eclipse permite gerar pacotes, mas estes não respeitam a estrutura do Maven e também não são instalados no repositório. Isso implica que, sem o uso de uma ferramenta externa, é necessário instalar manualmente todos os pacotes gerados.
Um plugin Maven para Eclipse está disponível, permitindo que o Eclipse use o Maven em segundo plano e, portanto, use o Eclipse e o Maven juntos.
Isso permite que os projetos Maven sejam gerados e armazenados no repositório.
Ele permite, em particular, depender de projetos que estão no repositório e, portanto, não precisamos importá-los no Eclipse como é o caso das ferramentas existentes. O classpath é gerado pelo Maven.
No entanto, seu uso apresenta algumas deficiências.
Se lançarmos o comando que gera o caminho de classe 'mvn eclipse: eclipse' de um POM pai, todos os módulos devem estar presentes na área de trabalho. A dependência é feita dentro deste espaço, e para haver dependência do repositório, é necessário executar o comando para cada módulo.
Outro problema (atualmente sem solução), diz respeito à herança quando não se respeita a hierarquia nos diretórios.
ObservaçõesAqui está uma lista não exaustiva de mecanismos de integração contínua que podem ser usados em conjunto com o Maven:
Aqui está uma lista não exaustiva de plataformas de análise de qualidade de código-fonte que podem ser usadas em conjunto com o Maven: