Antes de entrar em ANT, Maven ou Gradle, devemos primeiro entender poucas coisas relacionadas a eles.
Dependência: Em geral, uma dependência refere-se a quando algo requer alguma outra coisa para ser executado por si mesmo. Simplificando, ‘A’ tem dependência de ‘B’ se ‘A’ requer ‘B’ para a sua execução bem sucedida. No mundo do software, uma dependência é qualquer coisa que sua aplicação requer para sua execução com sucesso. É basicamente qualquer biblioteca de suporte externa requerida pela aplicação. Por exemplo, zuul, hystrix, lombok, jdbc, etc.
Inicialmente, nós usamos para gerenciar dependências por:
- baixando o arquivo jar da biblioteca requerida manualmente da internet e adicionando-a ao nosso projeto.
- escrevendo um script que automaticamente baixará a biblioteca de um fonte externa através da rede.
Problemas enfrentados antes destas ferramentas:
- Adicionar as dependências baixando-as manualmente da internet é uma tarefa muito cansativa.
- Nossos scripts podem falhar se a URL do fonte externo mudar através da internet.
- É muito difícil identificar e gerenciar as dependências transitivas em nossa aplicação.
Ferramenta de gerenciamento de dependências: Resolve e gerencia as dependências requeridas pela aplicação.
Ferramenta de gestão de dependências: Automatiza a criação de aplicações executáveis a partir do código fonte. A construção incorpora a compilação, ligação e empacotamento do código em uma forma utilizável ou executável. Automação de compilação envolve:
- Download dependencies
- Compilar código fonte em código binário
- Empacotar aquele código binário
- Executar testes
- Empacotamento em sistemas de produção
Ferramentas de gerenciamento de dependência e compilação em java:
- ANT + Ivy (2000/2004)
- Maven (2004)
- Gradle (2012)
Apache ANT (Another Neat Tool) é um projeto de código aberto pelo Apache, lançado no ano 2000. É uma biblioteca java utilizada para automatizar os processos de compilação de aplicações java. Também pode ser usada para a construção de aplicações não-java. Ela segue o princípio de “Configuração sobre convenção”. Em Ant, diferentes fases do processo de construção são chamadas de “Targets” (Alvos). Os arquivos de compilação ANT são escritos em XML e por convenção, eles são chamados “build.xml”. Ele contém três elementos: projeto, alvo e tarefa. Cada arquivo de compilação contém um projeto. Cada coisa no build.xml está sob o elemento projeto. O projeto contém pelo menos um target (padrão). O target contém um conjunto de tarefas dentro dele e define um estado específico do processo de compilação. Uma tarefa é um pedaço de código que pode ser executado. Cada nó pode ter atributos associados a eles:
Atributos do Project:
- Nome: O nome do projeto.
- Basedir: A pasta raiz do projeto e é opcional.
- Default: O alvo padrão para a construção. O projeto pode ter um ou mais alvos. Ele é usado para especificar o alvo padrão do projeto.
Atributos do alvo:
- Nome: O nome do alvo.
- Descrição: Uma descrição sobre o alvo.
- Depende: Lista de todos os alvos, separados por vírgula de que este alvo depende.
- Se: O alvo é executado se o atributo for verdadeiro.
- A menos que: O alvo é executado se o atributo não estiver definido.
Build.xml example:
<?xml version="1.0"?>
<project>
<target name="hello">
<echo>Hello, World</echo>
</target>
</project>
Adicionar dependência em Ant + Ivy:
<dependency org="org.projectlombok" name="lombok" rev="1.18.10"/>
O principal benefício de Ant é a sua flexibilidade. O Ant não impõe nenhuma convenção de codificação ou estrutura de projeto ao desenvolvedor. Consequentemente, isto significa que o Ant requer que os desenvolvedores escrevam todos os comandos por eles mesmos, o que às vezes leva a grandes arquivos de compilação e são difíceis de manter. Inicialmente, o Ant não tinha suporte embutido para gerenciamento de dependência. Mais tarde ele adotou o Apache Ivy, desenvolvido como um sub-projeto do projeto Apache Ant, para o propósito de gerenciamento de dependências.
Apache Maven
É uma ferramenta de gerenciamento de dependências e automação de compilação, lançada em 2004. Ela continua usando XML, mas supera os inconvenientes seguindo o princípio da “Convenção sobre configuração”. Ela se baseia em convenções e fornece comandos pré-definidos (objetivos). Seu arquivo de configuração, contendo instruções de gerenciamento de compilação e dependência, é por convenção chamado “pom.xml” e está presente na pasta raiz do projeto.
Maven engine toma o pom.xml e o projeto como inputs. Ele lê o arquivo pom.xml e baixa as dependências mencionadas nele como arquivos jarros para o repositório local. Em seguida, executa os ciclos de vida, fases de construção e plugins. No final, um artefato empacotado e testado é gerado.
pom.xml exemplo:
algumas tags importantes no arquivo pom.xml:
- groupId: Representa a organização à qual o projecto pertence.
- artifactId: É o nome do projecto.
- versão: Representa a versão do projeto.
- embalagem: Representa a forma final da construção do projeto. ex. jarro, war.
Adicionar dependência em maven:
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.10</version>
</dependency>
Repositório Maven:
Um repositório é um diretório onde todos os arquivos do jarro empacotados existem junto com seus próprios arquivos pom. Esses arquivos pom contêm as dependências externas desse projeto. Desta forma o maven baixa recursivamente a dependência das dependências do seu projeto até que todas as dependências necessárias estejam presentes no seu repositório local. Existem três tipos de repositórios no maven:
- Repositório local: É um repositório presente na própria máquina do desenvolvedor.
- Repositório de nível/remoto de organização: É um repositório presente dentro da organização.
- Repositório central: É um repositório pela internet, criado e mantido pela comunidade maven.