Ambientes de desenvolvimento Java, tanto em Linux quanto em Windows, precisam de algum tipo de automação para diminuir o tempo despendido pelo desenvolvedor, por exemplo, para gerar uma release (versão do sistema para distribuição ou homologação).
Uma das formas de automatizar tarefas uniformemente em todos os ambientes é usar uma ferramenta como o Apache Ant.
Ant é uma ferramenta poderosa e versátil que permite a criação de builds para compilação de código, montagem de pacotes, tratamento e conversão de arquivos e muito mais.
Não estamos falando de uma linguagem de programação. Ant é uma forma de declaração de atividades (tasks) necessárias em um determinado processo. Isso é feito através de um ou mais arquivos XML.
Instalando o Ant
Baixe o pacote binário na página de download oficial, descompacte-o numa pasta e adicione o caminho ao PATH
do seu sistema operacional.
No Windows podemos fazer isso para uma sessão do prompt de comando da seguinte forma:
set path=%path%;c:\caminho\apache-ant-1.9.3\bin
Esta técnica é adequada se for necessário usar mais de uma versão do Ant. Mas o melhor é alterar o PATH
diretamente nas configurações de sistema para sempre tê-lo disponível em linha de comando.
Escrevendo um build no Ant
O seguinte projeto Ant faz uma substituição usando expressões regulares em diversas linhas de um arquivo:
<project name="MeuProjeto" default="substituicao" basedir=".">
<target name="substituicao">
<replaceregexp
file="${file}"
byline="true"
match="meu nome é (\w+)"
replace="me chamo \1"
flags="gs" />
</target>
</project>
A tag <project>
declara o projeto atual e seus atributos básicos. Ela deve ser a raiz do arquivo. O atributo default
indica qual target
será executado se nenhum outro for informado via linha de comando. O atributo basedir
define o diretório base onde as tarefas serão executadas.
A tag <target>
, por sua vez, declara um conjunto das atividades. Nesse caso, temos apenas a task <replaceregexp>
.
Note o valor do atributo file
da nossa task: ${file}
. A cifra com as chaves de abertura e fechamento é algo similar à expression language do JSP, só que bem simplificada, tratando-se de uma interpolação de propriedades simples. O Ant substitui essa expressão por um valor definido anteriormente, de forma análoga a uma variável. Porém, não declaramos isso em lugar algum, então o valor terá que ser informado via linha de comando.
Executando o Projeto
Ao ser executado, o Ant procura automaticamente por um arquivo chamado build.xml
no diretório atual. Então, se file.txt
é um arquivo a ser processado pelo nosso build, o comando a seguir irá realizar a substituição:
ant -Dfile=file.txt
Caso o projeto Ant tenha outro nome, pode-se usar o parâmetro -f
:
ant -f /caminho/meu-build.xml -Dfile=file.txt
O que o Ant pode fazer
O Ant possui muitas tasks prontas, dentre as quais posso destacar:
- Javac: compila classes Java.
- Sshexec: executa comandos remotos via SSH.
- Copy: copia um ou mais arquivos, possibilitando filtrar o conteúdo e substituir trechos do mesmo.
- Jar, War, Ear: empacota arquivos em uma dessas estruturas.
Além disso, o Ant possui alguns pontos de extensão. Por exemplo, você pode criar tasks personalizadas ou até seu próprio interpolador de variáveis.
Note que o Ant não é uma linguagem procedural e não tem comandos de controle. Entretanto, existe um projeto chamado Ant Contrib que disponibiliza tasks adicionais como If, For e TryCatch. Isso vai um pouco contra a filosofia do Ant, mas pode ajudar seus build a serem mais poderosos.
Outro projeto que estende o Ant chama-se Flaka. Ele acrescenta uma expression language muito mais poderosa que a original, estruturas condicionais, tratamento de exceções e muitas tasks.
Aprendendo mais sobre o Ant
Minha dica é: apenas leia o manual todo, começando pela seção Writing a simple Buildfile. Ele não é muito extenso e explica bem os conceitos.
Entenda bem os conceitos gerais antes de usar as extensões mencionadas no tópico anterior a fim de evitar surpresas.
Ainda vale a pena usar o Ant se há outras opções para build?
Sim e não.
Hoje temos o Maven, por exemplo, que gerencia o ciclo de vida de um projeto, da compilação à publicação, de forma padronizada. Porém, a arquitetura dos builds Maven também limita a execução de atividades arbitrárias que são necessárias em alguns projetos. Por isso, quem conhece Ant pode usar o Maven Antrun Plugin para executar tarefas personalizadas em qualquer fase do processo de build. É muito mais simples que criar e manter, por exemplo, um plugin próprio para o Maven.
Outra ideia é criar tasks independentes de projetos. Por exemplo, para automatizar um processo batch executado no servidor ou mesmo uma tarefa repetitiva no ambiente de desenvolvimento, como compilação de relatórios JasperReports.
Por outro lado, não fique preso a uma única ferramenta. Procure ter um conhecimento geral sobre ferramentas de build como Ant, Maven, Graddle, Ivy e outros semelhantes. Em geral, é melhor ter um canivete suíço do que um facão grande para fazer tudo. 😉
Este artigo foi baseado na minha resposta no StackOverflow em Português!