Ferramentas de automação - INF

Propaganda
Especialização em web com interfaces
ricas
Ferramentas de automação
Prof. Fabrízzio Alphonsus A. M. N. Soares
[email protected] [email protected]
Instituto de Informática
Universidade Federal de Goiás
Aula 11
1 de junho de 2012
Prof. Fabrízzio Alphonsus A. M. N. Soares | Ferramentas de automação
1/108
Apache Ant
Nesta aula iremos aprender a:
Utilizar ferramentas para automação em tarefas de
programação.
Prof. Fabrízzio Alphonsus A. M. N. Soares | Ferramentas de automação
2/108
Apache Ant I
Com o Ant podemos realizar tarefas corriqueiras que vão desde
a criação e exclusão de diretórios até o empacotamento de arquivos JAR e WAR.
Prof. Fabrízzio Alphonsus A. M. N. Soares | Ferramentas de automação
3/108
Apache Ant II
Se você é desenvolver Java, mas ainda não conhece esta ferramenta, a leitura e releitura deste tutorial trarão muitos benefícios e redução de tempo no desenvolvimento de seus projetos.
Prof. Fabrízzio Alphonsus A. M. N. Soares | Ferramentas de automação
4/108
O que é o Apache Ant I
O Apache Ant, ou simplesmente Ant, é uma ferramenta escrita em Java e usada para a automatização de builds e tarefas.
Para desenvolvedores veteranos, o Ant é uma espécie de make,
porém, mais simples de se configurar e usar.
Prof. Fabrízzio Alphonsus A. M. N. Soares | Ferramentas de automação
5/108
O que é o Apache Ant II
O uso do Ant é justificado devido à quantidade de tarefas que
devem ser executadas antes que uma aplicação esteja pronta
para instalação ou distribuição final.
Prof. Fabrízzio Alphonsus A. M. N. Soares | Ferramentas de automação
6/108
O que é o Apache Ant III
Entre estas tarefas estão:
compilação de classes Java;
criação ou exclusão de diretórios;
empacotamento de arquivos;
execução de programas externos;
etc.
Prof. Fabrízzio Alphonsus A. M. N. Soares | Ferramentas de automação
7/108
O que é o Apache Ant IV
Quando se está usando um IDE, este se encarrega de realizar
estas tarefas, uma vez que muitos deles já trazem o Ant embutido. No entanto, o entendimento do Ant, e suas principais
tarefas, é muito importante para o desenvolvedor Java que deseja entender como estas operações funcionam nos bastidores.
Prof. Fabrízzio Alphonsus A. M. N. Soares | Ferramentas de automação
8/108
O que é o Apache Ant V
O processo de automação de tarefas usando o Ant está completamente centrado no uso de um documento XML que contém
toda a informação sobre as tarefas a serem executadas.
Como estes documentos XML são criados e configurados pelo
desenvolvedor, recomendo que você reveja seus conhecimentos
sobre esta linguagem de marcação antes de progredirmos.
Prof. Fabrízzio Alphonsus A. M. N. Soares | Ferramentas de automação
9/108
Baixando e instalando I
Os passos descritos neste tópico guiarão você durante o processo
de baixar, instalar e configurar a ferramenta Ant no Windows
XP.
De acordo com a documentação no endereço http://ant.apache.org/,
esta ferramenta pode ser usada com sucesso em outras plataformas tais como Linux, Solaris, MacOS X, entre outros.
Prof. Fabrízzio Alphonsus A. M. N. Soares | Ferramentas de automação
10/108
Baixando e instalando II
Para instalar o Apache Ant no Ubuntu Linux basta busca-lo no
Synaptic.
Prof. Fabrízzio Alphonsus A. M. N. Soares | Ferramentas de automação
11/108
Baixando e instalando III
Esta ula foi escrita usando-se a versão 1.8.2 do Ant (liberada em
Dezembro de 2010). Para baixar a versão mais recente basta direcionar seu navegador para o endereço http://ant.apache.org/bindow
e localizar o link apache-ant-x.y.z-bin.zip.
Prof. Fabrízzio Alphonsus A. M. N. Soares | Ferramentas de automação
12/108
Baixando e instalando IV
Clique neste link, baixe o arquivo para seu computador e siga
os passos descritos a seguir para instalar, configurar e testar o
Ant:
1
Descompacte o arquivo que você baixou em qualquer
diretório. O resultado será uma pasta com o nome
apache-ant-x.y.z-bin contendo outra pasta chamada
apache-ant-x.y.z. Altere o nome da segunda pasta para
ant e mova-a para o diretório raiz de seu sistema.
Prof. Fabrízzio Alphonsus A. M. N. Soares | Ferramentas de automação
13/108
Baixando e instalando V
2
A única exigência para que o Ant funcione corretamente é
que você possua uma instalação recente do SDK JavaSE.
Se você possui o Tomcat ou o servidor de aplicações do
JavaEE instalado e rodando na sua máquina, não precisa
se preocupar. O seu SDK JavaSE já está instalado e
funcionando. Dessa forma, só precisamos adicionar o
diretório bin do Ant ao path do sistema. No Windows XP
isso é feito da seguinte forma:
a. Vá até Iniciar -> Configurações -> Painel de Controle ->
Sistema;
b. Na aba “Avançado” clique em “Variáveis de Ambiente”;
Prof. Fabrízzio Alphonsus A. M. N. Soares | Ferramentas de automação
14/108
Baixando e instalando VI
c. Em “Variáveis de usuário para...” você tem as opções de
incluir, alterar ou remover as variáveis e/ou seus valores.
Se a variável PATH ainda não estiver definida, defina-a.
Em seguida adicione o valor “C:
ant
bin”. Isso fará com que o Windows (ou qualquer sistema
que você esteja executando) reconheça o comando ant a
partir de qualquer diretório. Se a variável PATH contiver
mais de um valor, certifique-se de que esteja em um
formato similar a:
1
C:\Sun\AppServer\bin;C:\Sun\AppServer\jdk\bin;C:\ant\
bin
Prof. Fabrízzio Alphonsus A. M. N. Soares | Ferramentas de automação
15/108
Baixando e instalando VII
1
1
E agora, hora de testar o Ant. Se você seguiu todos os
passos descritos para a instalação e configuração, abra
uma janela do DOS (ou o prompt do Linux) e digite o
seguinte comando:
ant -version
Se a ferramenta estiver funcionando corretamente você verá o
seguinte resultado:
1
Apache Ant version 1.8.2 compiled on December 27 2010.
Se você detectou algum problema volte e certifique-se de que
seguiu as instruções contidas aqui e também as dicas fornecidas
no manual do Ant.
Prof. Fabrízzio Alphonsus A. M. N. Soares | Ferramentas de automação
16/108
Entendendo alvos, tarefas e o arquivo
build.xml I
A automatização de tarefas com o Ant é feita usando-se arquivos de configuração escritos em XML. Estes arquivos, geralmente chamados de build.xml possuem uma estrutura uniforme,
variando apenas alguns elementos.
Prof. Fabrízzio Alphonsus A. M. N. Soares | Ferramentas de automação
17/108
Entendendo alvos, tarefas e o arquivo
build.xml II
Em geral, seguem o seguinte modelo:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<project name="nome_projeto" basedir="." default="alvo1">
<target name="alvo1">
<tarefa1 />
<tarefa2 />
</target>
<target name="alvo2">
<tarefa1 />
<tarefa2 />
</target>
<target name="alvo3">
<tarefa1 />
</target>
</project>
Prof. Fabrízzio Alphonsus A. M. N. Soares | Ferramentas de automação
18/108
Entendendo alvos, tarefas e o arquivo
build.xml III
A raiz deste documento XML é o elemento project. Os elementosfilhos são chamados de target (alvo) que, por sua vez, possuem
tasks (tarefas) como seus elementos-filhos.
Prof. Fabrízzio Alphonsus A. M. N. Soares | Ferramentas de automação
19/108
Entendendo alvos, tarefas e o arquivo
build.xml IV
Veja a definição dos três atributos para o elemento project:
name: O nome do projeto. Este atributo pode ser
omitido;
basedir: O diretório base a partir do qual os demais
caminhos para arquivos e diretórios serão calculados. O
valor “.” define o diretório atual. Este atributo pode ser
omitido;
default: O alvo (target) padrão a ser usado quando
nenhum alvo é especificado na linha de comando.
Prof. Fabrízzio Alphonsus A. M. N. Soares | Ferramentas de automação
20/108
Entendendo alvos, tarefas e o arquivo
build.xml V
Um elemento project pode conter um número ilimitado de targets. Os elementos targets possuem elementos-filhos que nos
permitem definir as tarefas a serem realizadas quando um determinado alvo é executado. Entre os atributos de um elemento
target o mais importante é name. Este atributo não pode ser
omitido.
Prof. Fabrízzio Alphonsus A. M. N. Soares | Ferramentas de automação
21/108
Entendendo alvos, tarefas e o arquivo
build.xml VI
Tarefas (tasks) são trechos de código que podem ser executados
dependendo do objetivo da aplicação e de qual alvo o Ant está
executando no momento. Dentre as tarefas mais comuns estão: criar, renomear ou excluir diretórios, compilar e empacotar
arquivos, etc.
Prof. Fabrízzio Alphonsus A. M. N. Soares | Ferramentas de automação
22/108
Criando diretórios e copiando arquivos
usando Ant I
Vamos um exemplo do uso do Apache Ant como ferramenta
para criar diretórios e copiar arquivos.
Para isso você deverá efetuar os seguintes passos:
1
2
3
Crie um diretório chamado “antTeste”. Lembre-se. Limite
seus nomes de diretórios a oito caracteres no DOS;
Dentro deste diretório crie um arquivo em branco
chamado “index.jsp”;
Abra o bloco de notas (ou seu editor favorito) e crie o
seguinte documento XML:
Prof. Fabrízzio Alphonsus A. M. N. Soares | Ferramentas de automação
23/108
Criando diretórios e copiando arquivos
usando Ant II
1
2
3
4
5
6
<project name="teste" basedir="." default="alvo">
<target name="alvo">
<mkdir dir="paginas" />
<copy file="index.jsp" todir="paginas" />
</target>
</project>
Prof. Fabrízzio Alphonsus A. M. N. Soares | Ferramentas de automação
24/108
Criando diretórios e copiando arquivos
usando Ant III
Salve este arquivo com o nome de build.xml no diretório antTeste. Se este diretório foi criado na raiz do seu sistema, você
poderá abrir uma seção do DOS, navegar até o diretório antTeste e executar o seguinte comando:
1
C:\ANTTESTE>ant alvo
Prof. Fabrízzio Alphonsus A. M. N. Soares | Ferramentas de automação
25/108
Criando diretórios e copiando arquivos
usando Ant IV
Se a estrutura do documento XML estiver bem formada, você
verá o seguinte resultado:
Buildfile: build.xml
alvo:
[mkdir] Created dir: C:\ANTTESTE\paginas
[copy] Copying 1 file to C:\ANTTESTE\pagina
BUILD SUCCESSFUL
Total time: 0 seconds
Prof. Fabrízzio Alphonsus A. M. N. Soares | Ferramentas de automação
26/108
Criando diretórios e copiando arquivos
usando Ant V
Abra o diretório antTeste e verá que a pasta paginas foi criada
e dentro desta temos uma cópia do arquivo index.jsp. Vamos
entender como isso aconteceu:
O elemento raiz do documento XML:
1
2
<project name="teste" basedir="." default="alvo">
</project>
Define o diretório atual como valor para a propriedade basedir
e define o target alvo como padrão. Desta maneira, o mesmo
resultado poderia ser obtido omitindo o valor alvo na chamada
ao Ant:
Prof. Fabrízzio Alphonsus A. M. N. Soares | Ferramentas de automação
27/108
Criando diretórios e copiando arquivos
usando Ant VI
1
C:\ANTTESTE>ant
Prof. Fabrízzio Alphonsus A. M. N. Soares | Ferramentas de automação
28/108
Criando diretórios e copiando arquivos
usando Ant VII
Observe agora a estrutura do elemento target cujo nome é alvo:
1
2
3
4
<target name="alvo">
<mkdir dir="paginas" />
<copy file="index.jsp" todir="paginas" />
</target>
Veja que a primeira tarefa deste alvo é criar o diretório “paginas”:
1
<mkdir dir="paginas" />
A segunda tarefa copia o arquivo index.jsp para o diretório paginas:
Prof. Fabrízzio Alphonsus A. M. N. Soares | Ferramentas de automação
29/108
Criando diretórios e copiando arquivos
usando Ant VIII
1
<copy file="index.jsp" todir="paginas" />
Como você pode ver, o atributo basedir foi definido, mas não
o usamos durante a execução das tarefas (embora a ferramenta
o tenha usado implicitamente para saber o diretório a partir do
qual as tarefas propostas deveriam ser realizadas).
Prof. Fabrízzio Alphonsus A. M. N. Soares | Ferramentas de automação
30/108
Usando variáveis durante o processo de
automação de tarefas I
O Apache Ant nos permite usar variáveis nos documentos XML
usados na automação das tarefas. Este é um recurso interessante, pois torna o processo mais dinâmico e encoraja o reaproveitamento de código. Além disso, a ferramenta traz algumas
variáveis embutidas e permite o acesso a propriedades do sistema, como veremos mais adiante.
Prof. Fabrízzio Alphonsus A. M. N. Soares | Ferramentas de automação
31/108
Usando variáveis durante o processo de
automação de tarefas II
Em geral o acesso a variáveis é feito na forma ${nome_da_variável}.
Veja um exemplo de tarefa que cria uma pasta chamada paginas
no diretório home do usuário atual:
1
2
3
<target name="diretorio">
<mkdir dir="${user.home}/paginas" />
</target>
Prof. Fabrízzio Alphonsus A. M. N. Soares | Ferramentas de automação
32/108
Usando variáveis durante o processo de
automação de tarefas III
Outra forma de se usar variáveis é declará-las globais usando
a tarefa property. Isso é feito antes da declaração de qualquer
elemento target. Veja um exemplo:
1
2
3
4
5
6
7
8
9
10
11
<project name="teste" basedir="c:/estudos" default="dir">
<property name="src" location="src"/>
<property name="build" location="build"/>
<target name="dir">
<mkdir dir="${src}/java" />
<mkdir dir="${build}/dist" />
</target>
</project>
Prof. Fabrízzio Alphonsus A. M. N. Soares | Ferramentas de automação
33/108
Usando variáveis durante o processo de
automação de tarefas IV
Uma tarefa property possui muitos atributos. Para este exemplo
estamos usando name e location. Veja suas definições:
name: O valor da propriedade, ou seja, aquele que será
referenciado como variável dentro das tarefas do
documento XML.
location: Associa a propriedade a um nome de arquivo ou
diretório. Neste caso o caminho pode ser absoluto ou
relativo. Sendo relativo, o caminho será expandido de
acordo com o valor da propriedade basedir.
Prof. Fabrízzio Alphonsus A. M. N. Soares | Ferramentas de automação
34/108
Usando variáveis durante o processo de
automação de tarefas V
O valor da propriedade basedir é “c:
estudos”. Se chamarmos o Ant neste exemplo teremos o seguinte resultado:
Buildfile: build.xml
dir:
[mkdir] Created dir: C:\estudos\src\java
[mkdir] Created dir: C:\estudos\build\dist
BUILD SUCCESSFUL
Total time: 0 seconds
Prof. Fabrízzio Alphonsus A. M. N. Soares | Ferramentas de automação
35/108
Usando variáveis durante o processo de
automação de tarefas VI
Experimente alterar os valores dos atributos name e location e
observe o resultado obtido. Altere agora o valor da propriedade
basedir e efetue mais alguns testes.
Prof. Fabrízzio Alphonsus A. M. N. Soares | Ferramentas de automação
36/108
Como compilar arquivos Java usando Ant
I
Nosso próximo exemplo é um pouco mais elaborado e coloca em
prática alguns dos conceitos explicados nos tópicos anteriores.
Desta vez você usará o Ant para compilar um arquivo .java,
criar um diretório e mover para este diretório o resultado da
compilação, ou seja, o arquivo com a extensão .class.
Prof. Fabrízzio Alphonsus A. M. N. Soares | Ferramentas de automação
37/108
Como compilar arquivos Java usando Ant
II
Para isso siga os seguintes passos:
1
2
1
2
3
4
5
Crie um diretório no qual o projeto será desenvolvido,
pode ser algo como “c:
testes” (ou algo semelhante se estiver usando Linux);
Abra seu editor favorito e escreva o seguinte programa
Java (para sua comodidade este arquivo pode ser baixado
clicando-se aqui):
public class TesteAnt{
public static void main(String args[]){
System.out.println("Compilando com Ant");
}
}
Prof. Fabrízzio Alphonsus A. M. N. Soares | Ferramentas de automação
38/108
Como compilar arquivos Java usando Ant
III
3
1
2
3
4
5
6
7
8
9
10
11
12
Salve este arquivo com o nome de TesteAnt.java no
diretório que você criou no passo 1.
Crie um documento XML semelhante ao mostrado a
seguir:
<project name="teste" basedir="." default="compilar">
<property name="classes" location="classes"/>
<target name="dir">
<mkdir dir="classes" />
</target>
<target name="compilar" depends="dir">
<javac srcdir="${basedir}"
destdir="${classes}" />
</target>
Prof. Fabrízzio Alphonsus A. M. N. Soares | Ferramentas de automação
39/108
Como compilar arquivos Java usando Ant
IV
13
14
4
1
</project>
Salve este arquivo com o nome build.xml no diretório que
você criou no passo 1.
Hora do teste. Abra uma seção do DOS, navegue até o
diretório que você criou e execute o comando:
C:\TESTES>ant compilar
Se você seguiu os passos anteriores atentamente, você
verá o seguinte resultado:
Prof. Fabrízzio Alphonsus A. M. N. Soares | Ferramentas de automação
40/108
Como compilar arquivos Java usando Ant
V
Buildfile: build.xml
dir:
[mkdir] Created dir: C:\TESTES\classes
compilar:
[javac] Compiling 1 source file to C:\TE
BUILD SUCCESSFUL
Total time: 2 seconds
Prof. Fabrízzio Alphonsus A. M. N. Soares | Ferramentas de automação
41/108
Como compilar arquivos Java usando Ant
VI
Abra o diretório “c:
testes” e verá a pasta classes. Dentro desta pasta você encontrará o arquivo TesteAnt.class.
Realmente uma ferramenta muito útil, não? Vamos ver como
isso aconteceu.
Prof. Fabrízzio Alphonsus A. M. N. Soares | Ferramentas de automação
42/108
Como compilar arquivos Java usando Ant
VII
Observação Importante:
Se houver mais de um arquivo .java neste diretório todos eles
serão compilados e os arquivos .class correspondentes serão copiados para a pasta classes. Existe, porém, uma ressalva nesta
regra: somente arquivos .java que não possuem seus arquivos
.class correspondentes ou arquivos .java mais recentes que seus
arquivos .class é que serão compilados.
Mais adiantes veremos o uso de filtros para compilar apenas
determinados arquivos.
Prof. Fabrízzio Alphonsus A. M. N. Soares | Ferramentas de automação
43/108
Como compilar arquivos Java usando Ant
VIII
Este exemplo pode ser executado chamando o Ant sem argumentos. Lembra-se de que, na falta de argumentos, a tarefa que
será executada é aquela definida no atributo default? Analise a
seguinte tarefa:
1
<target name="compilar" depends="dir">
Prof. Fabrízzio Alphonsus A. M. N. Soares | Ferramentas de automação
44/108
Como compilar arquivos Java usando Ant
IX
Veja que ao usarmos o atributo depends, estamos informando
ao Ant que a tarefa compilar deverá ser executada somente após
a execução da tarefa dir. E, nem precisamos chamar esta tarefa
a partir da linha de comando. O Ant se encarrega de tudo.
Prof. Fabrízzio Alphonsus A. M. N. Soares | Ferramentas de automação
45/108
Como compilar arquivos Java usando Ant
X
Após a criação do diretório classes na tarefa dir:
1
2
3
<target name="dir">
<mkdir dir="classes" />
</target>
temos a tarefa que compila o arquivo .java e copia o resultado
(o arquivo .class) para o diretório classes:
1
2
3
4
<target name="compilar" depends="dir">
<javac srcdir="${basedir}"
destdir="${classes}" />
</target>
Prof. Fabrízzio Alphonsus A. M. N. Soares | Ferramentas de automação
46/108
Como compilar arquivos Java usando Ant
XI
Veja que para este exemplo fornecemos ao compilador Java apenas o diretório de saída (srcdir) e o diretório de destino (destdir). É possível fornecer mais informações tais como classpath,
target, etc.
Prof. Fabrízzio Alphonsus A. M. N. Soares | Ferramentas de automação
47/108
Uso do Ant na execução de aplicativos
Java I
Vamos ver como é possível executar o arquivo resultante da
compilação (arquivos .class). Para isto vamos modificar o documento XML usado no exemplo anterior para esta nova versão:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<project name="teste" basedir="." default="compilar">
<property name="classes" location="classes"/>
<property name="arquivo" value="TesteAnt" />
<target name="dir">
<mkdir dir="classes" />
</target>
<target name="compilar" depends="dir">
<javac srcdir="${basedir}"
destdir="${classes}" />
</target>
Prof. Fabrízzio Alphonsus A. M. N. Soares | Ferramentas de automação
48/108
Uso do Ant na execução de aplicativos
Java II
15
16
17
18
19
20
21
<target name="executar" depends="dir, compilar">
<java classname="${arquivo}" >
<classpath path="${classes}" />
</java>
</target>
</project>
Prof. Fabrízzio Alphonsus A. M. N. Soares | Ferramentas de automação
49/108
Uso do Ant na execução de aplicativos
Java III
Este arquivo XML contém informações para algumas tarefas um
pouco mais complexas. Comece analisando a segunda tarefa
property:
1
<property name="arquivo" value="TesteAnt" />
Veja que está tarefa se chama arquivo e possui o valor TesteAnt.
Fique atento ao uso deste valor mais adiante. O diretório classes
é criado com o seguinte alvo:
1
2
3
<target name="dir">
<mkdir dir="classes" />
</target>
Prof. Fabrízzio Alphonsus A. M. N. Soares | Ferramentas de automação
50/108
Uso do Ant na execução de aplicativos
Java IV
Para compilar o arquivo TesteAnt.java e copiá-lo para a pasta
classes usamos o alvo:
1
2
3
4
<target name="compilar" depends="dir">
<javac srcdir="${basedir}"
destdir="${classes}" />
</target>
Finalmente, executamos o arquivo resultante (TesteAnt.class)
usando o alvo:
Prof. Fabrízzio Alphonsus A. M. N. Soares | Ferramentas de automação
51/108
Uso do Ant na execução de aplicativos
Java V
1
2
3
4
5
<target name="executar" depends="dir, compilar">
<java classname="${arquivo}" >
<classpath path="${classes}" />
</java>
</target>
Prof. Fabrízzio Alphonsus A. M. N. Soares | Ferramentas de automação
52/108
Uso do Ant na execução de aplicativos
Java VI
Veja que esta tarefa depende das duas tarefas anteriores. Desta
forma, você poderá executar o Ant fornecendo o alvo executar
como argumento:
1
Ant executar
Prof. Fabrízzio Alphonsus A. M. N. Soares | Ferramentas de automação
53/108
Uso do Ant na execução de aplicativos
Java VII
Dentre os argumentos que podem ser fornecidos para a tarefa
java, os mais importantes são classname (o nome da classe a ser
executada) e classpath (o caminho para o diretório que contem
a(s) classe(s)).
Observe que temos que usar o atributo path juntamente com o
argumento classpath.
Prof. Fabrízzio Alphonsus A. M. N. Soares | Ferramentas de automação
54/108
Uso do Ant na execução de aplicativos
Java VIII
Como sugestão, recomendo que você investigue na documentação do Ant outros argumentos possíveis.
Prof. Fabrízzio Alphonsus A. M. N. Soares | Ferramentas de automação
55/108
Exibindo mensagens durante o processo
de automação das tarefas I
Durante o processo de execução das diversas tarefas definidas
no documento XML, é possível exibir mensagens usando a tarefa echo. Este procedimento é útil quando precisamos de um
feedback visual dos procedimentos realizados pelo Ant.
Prof. Fabrízzio Alphonsus A. M. N. Soares | Ferramentas de automação
56/108
Exibindo mensagens durante o processo
de automação das tarefas II
O documento XML a seguir mostra a você como se certificar de
que os valores fornecidos para algumas variáveis são realmente
aqueles que você precisa durante a realização das tarefas. O
exemplo mostra ainda como exibir valores das variáveis embutidas no Ant:
Prof. Fabrízzio Alphonsus A. M. N. Soares | Ferramentas de automação
57/108
Exibindo mensagens durante o processo
de automação das tarefas III
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<project name="teste" basedir="." default="exibir">
<tstamp>
<format property="horas" pattern="hh:mm:ss" locale="br"
/>
<format property="data" pattern="dd/MM/yyyy" locale="br"
/>
</tstamp>
<property name="projeto.nome" value="TesteEcho"/>
<target name="exibir">
<echo>Este e um exemplo de como voce pode usar
a tarefa echo para exibir mensagens durante o
processo
de automacao de builds.
</echo>
</target>
Prof. Fabrízzio Alphonsus A. M. N. Soares | Ferramentas de automação
58/108
Exibindo mensagens durante o processo
de automação das tarefas IV
17
18
19
20
21
22
23
24
25
26
27
28
29
<target name="java">
<echo message="Instalacao do Java: ${java.home}"/>
</target>
<target name="projeto">
<echo message="Projeto: ${projeto.nome}"/>
</target>
<target name="DataHora">
<echo message="Data e Hora: ${data} - ${horas}" />
</target>
</project>
Prof. Fabrízzio Alphonsus A. M. N. Soares | Ferramentas de automação
59/108
Exibindo mensagens durante o processo
de automação das tarefas V
Este documento XML apresenta a tarefa Tstamp. Esta tarefa é
muito útil quando queremos exibir informações sobre a hora e a
data em que o arquivo que a contém foi processado pelo Ant.
Prof. Fabrízzio Alphonsus A. M. N. Soares | Ferramentas de automação
60/108
Exibindo mensagens durante o processo
de automação das tarefas VI
Seu propósito é definir as propriedades DSTAMP, TSTAMP e
TODAY. Por padrão, a propriedade DSTAMP é definida no
formato “yyyyMMdd”, TSTAMP é definida no formato “hhmm”
e TODAY no formato “MMMM dd yyyy”. Uma abordagem
interessante é usar o elemento format para formatar estes dados
de acordo com o formato a que estamos acostumados.
Prof. Fabrízzio Alphonsus A. M. N. Soares | Ferramentas de automação
61/108
Exibindo mensagens durante o processo
de automação das tarefas VII
Veja como o usamos no exemplo:
1
2
3
4
<tstamp>
<format property="horas" pattern="hh:mm:ss" locale="br"/>
<format property="data" pattern="dd/MM/yyyy" locale="br"/>
</tstamp>
Aqui temos um elemento format com três atributos:
1
2
O primeiro atributo define a variável global que poderá
ser acessada nas tarefas do documento.
O segundo atributo é o padrão de data a ser aplicado e o
ultimo atributo fornece a identificação do país que possui
o padrão de data usado.
Prof. Fabrízzio Alphonsus A. M. N. Soares | Ferramentas de automação
62/108
Exibindo mensagens durante o processo
de automação das tarefas VIII
3
O atributo locale pode ser omitido sem prejudicar a
estrutura do documento.
Por enquanto, saiba que as variáveis horas e data poderão ser
acessadas em todo o documento XML usando-se os formatos
${data} e ${horas}.
Prof. Fabrízzio Alphonsus A. M. N. Soares | Ferramentas de automação
63/108
Exibindo mensagens durante o processo
de automação das tarefas IX
Após a definição da tarefa Tstamp, temos uma tarefa property:
1
<property name="projeto.nome" value="TesteEcho"/>
Usamos esta tarefa para fornecer um nome para o projeto. Veja
que é possível usar pontos (.) nos nomes das tarefas property.
Isso facilita a criação de hierarquias. A partir deste ponto o
nome do projeto pode ser acessado usando-se ${projeto.nome}.
Prof. Fabrízzio Alphonsus A. M. N. Soares | Ferramentas de automação
64/108
Exibindo mensagens durante o processo
de automação das tarefas X
O primeiro alvo, que pode ser invocado por “ant exibir”, executa apenas a tarefa echo. Como resultado, teremos apenas a
exibição, no console, do texto entre as tags <echo></echo>:
1
2
3
4
5
6
<target name="exibir">
<echo>Este e um exemplo de como voce pode usar
a tarefa echo para exibir mensagens durante o processo
de automacao de builds.
</echo>
</target>
Prof. Fabrízzio Alphonsus A. M. N. Soares | Ferramentas de automação
65/108
Exibindo mensagens durante o processo
de automação das tarefas XI
O segundo alvo, que pode ser invocado por “ant java”, executa outra tarefa echo. Desta vez temos a exibição do local de
instalação do Java:
1
2
3
<target name="java">
<echo message="Instalacao do Java: ${java.home}"/>
</target>
Os dois últimos alvos, invocados por “ant projeto” e “ant DataHora”, fazem uso da tarefa echo para exibir o nome do projeto
e a data e hora da execução das tarefas.
Prof. Fabrízzio Alphonsus A. M. N. Soares | Ferramentas de automação
66/108
Como gerar arquivos JAR usando Ant I
Agora que você já conhece algumas das tarefas básicas da ferramenta Ant, podemos avançar um pouco mais.
Neste tópico você aprenderá como escrever um aplicativo Java
composto de três classes. Em seguida escreverá um arquivo de
build que compilará estas classes. Finalmente você as colocará
em um arquivo Jar para distribuição. Lembre-se de que todo
o processo de compilação das classes e geração do arquivo Jar
deverá ser feito por um único arquivo de build.
Prof. Fabrízzio Alphonsus A. M. N. Soares | Ferramentas de automação
67/108
Como gerar arquivos JAR usando Ant II
O primeiro passo será escrever os arquivos .java que farão parte
do exemplo. Este é um aplicativo simples composto de três
classes chamadas Empresa, Funcionario e Cliente (boa hora para
praticar composição).
Prof. Fabrízzio Alphonsus A. M. N. Soares | Ferramentas de automação
68/108
Como gerar arquivos JAR usando Ant III
Para acompanhar este exemplo você deverá criar um diretório
chamado testes em seu sistema (no meu sistema estou usando
“C:
testes”). Em seguida crie três arquivos .java de acordo com as
listagens seguintes:
Prof. Fabrízzio Alphonsus A. M. N. Soares | Ferramentas de automação
69/108
Como gerar arquivos JAR usando Ant IV
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Funcionario{
private String nome;
private double salario;
public Funcionario(String nome, double salario){
this.nome = nome;
this.salario = salario;
}
public String getNome(){
return nome;
}
public double getSalario(){
return salario;
}
}
Prof. Fabrízzio Alphonsus A. M. N. Soares | Ferramentas de automação
70/108
Como gerar arquivos JAR usando Ant V
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Cliente{
private String nome;
private int codigo;
public Cliente(String nome, int codigo){
this.nome = nome;
this.codigo = codigo;
}
public String getNome(){
return nome;
}
public int getCodigo(){
return codigo;
}
}
Prof. Fabrízzio Alphonsus A. M. N. Soares | Ferramentas de automação
71/108
Como gerar arquivos JAR usando Ant VI
1
2
3
4
5
6
7
8
9
10
11
public class Empresa{
public static void main(String args[]){
Funcionario func = new Funcionario("Carlos", 3465.23);
Cliente cli = new Cliente("Bush", 324);
System.out.println("Funcionário: " + func.getNome());
System.out.println("Cliente: " + cli.getCodigo());
System.exit(0);
}
}
Prof. Fabrízzio Alphonsus A. M. N. Soares | Ferramentas de automação
72/108
Como gerar arquivos JAR usando Ant VII
Este exemplo é muito simples. Tudo que temos aqui é uma
classe pública (Empresa) que constrói instancias de duas classes
que possuem acesso de pacote. Não entraremos em detalhes
sobre o funcionamento de cada uma.
Prof. Fabrízzio Alphonsus A. M. N. Soares | Ferramentas de automação
73/108
Como gerar arquivos JAR usando Ant VIII
Nosso objetivo é entender como o Ant nos possibilita compilar e
empacotar estas classes em um arquivo Jar. Sendo assim vamos
escrever o arquivo build.xml. Eis a listagem:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<project name="teste" basedir="." default="executar">
<property name="classes" location="classes"/>
<target name="dir">
<mkdir dir="classes" />
</target>
<target name="limpar">
<delete dir="classes"/>
</target>
<target name="compilar" depends="dir">
<javac srcdir="${basedir}"
classpath="${classes}"
destdir="${classes}" />
Prof. Fabrízzio Alphonsus A. M. N. Soares | Ferramentas de automação
74/108
Como gerar arquivos JAR usando Ant IX
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
</target>
<target name="empacotar" depends="compilar">
<mkdir dir="build/jar"/>
<jar destfile="build/jar/Empresa.jar"
basedir="${basedir}/classes">
<manifest>
<attribute name="Main-Class" value="Empresa"/>
</manifest>
</jar>
</target>
<target name="executar" depends="empacotar, limpar">
<java jar="build/jar/Empresa.jar" fork="true"/>
</target>
</project>
Prof. Fabrízzio Alphonsus A. M. N. Soares | Ferramentas de automação
75/108
Como gerar arquivos JAR usando Ant X
Antes de executarmos este exemplo certifique-se de ter efetuado
todos os passos descritos anteriormente, ou seja, você deverá
ter um diretório chamado C:
testes contendo três arquivos .java e o arquivo de build (build.xml).
Agora é só abrir uma seção do DOS, navegar até C:
testes e inserir o comando abaixo:
1
C:\testes>ant
Prof. Fabrízzio Alphonsus A. M. N. Soares | Ferramentas de automação
76/108
Como gerar arquivos JAR usando Ant XI
Veja o resultado da execução do arquivo de build:
Buildfile: build.xml
dir:
[mkdir] Created dir: C:\testes\classes
compilar:
[javac] Compiling 3 source files to C:\test
empacotar:
[mkdir] Created dir: C:\testes\build\jar
[jar] Building jar: C:\testes\build\jar\Emp
Prof. Fabrízzio Alphonsus A. M. N. Soares | Ferramentas de automação
77/108
Como gerar arquivos JAR usando Ant XII
limpar:
[delete] Deleting directory C:\testes\class
executar:
[java] Funcionario: Osmar
[java] Cliente: 324
BUILD SUCCESSFUL
Total time: 8 seconds
Prof. Fabrízzio Alphonsus A. M. N. Soares | Ferramentas de automação
78/108
Como gerar arquivos JAR usando Ant XIII
Como podemos ver por este resultado, nosso arquivo de build
foi executado da maneira que esperávamos. Abra o diretório C:
testes
build
jar e verá que o arquivo Empresa.jar realmente foi gerado. Caso
deseje executa-lo novamente sem a ajuda do Ant basta abrir
uma seção do DOS e digitar o comando abaixo:
1
C:\testes\build\jar>java -jar Empresa.jar
Prof. Fabrízzio Alphonsus A. M. N. Soares | Ferramentas de automação
79/108
Como gerar arquivos JAR usando Ant XIV
Vamos agora entender todas as tarefas contidas neste arquivo
de build. Comece analisando o elemento project:
1
<project name="teste" basedir="." default="executar">
Veja que o nome do projeto é teste, o diretório base é o diretório
atual e a tarefa padrão (no caso de omitirmos a tarefa na linha
de comando) é executar. Em seguida temos a tarefa property
que nos permite definir uma variável global chamada classes:
1
<property name="classes" location="classes"/>
Essa variável será usada para indicarmos para o arquivo de build
o diretório onde os arquivos .java deverão ser colocados após a
compilação.
Prof. Fabrízzio Alphonsus A. M. N. Soares | Ferramentas de automação
80/108
Como gerar arquivos JAR usando Ant XV
Quando este arquivo de build é executado temos uma série de
tarefas dependentes umas das outras. Por exemplo, a tarefa
executar depende das tarefas empacotar e limpar. Já a tarefa
empacotar depende da tarefa compilar e assim por diante. Veja
a seqüência da execução das tarefas (assumindo que a tarefa
padrão seja executar):
1
2
3
4
5
dir
compilar
empacotar
limpar
executar
Prof. Fabrízzio Alphonsus A. M. N. Soares | Ferramentas de automação
81/108
Como gerar arquivos JAR usando Ant XVI
Veja o trecho da tarefa dir:
1
2
3
<target name="dir">
<mkdir dir="classes" />
</target>
Prof. Fabrízzio Alphonsus A. M. N. Soares | Ferramentas de automação
82/108
Como gerar arquivos JAR usando Ant
XVII
Tudo que fazemos aqui é criar um diretório chamado classes.
Em seguida observe a tarefa compilar:
1
2
3
4
5
<target name="compilar" depends="dir">
<javac srcdir="${basedir}"
classpath="${classes}"
destdir="${classes}" />
</target>
Prof. Fabrízzio Alphonsus A. M. N. Soares | Ferramentas de automação
83/108
Como gerar arquivos JAR usando Ant
XVIII
Para a tarefa javac definimos valores para três atributos. São
eles:
srcdir define o diretório em que os arquivos .java a
serem compilados se encontram. Usamos o
atributo basedir para especificar o diretório atual.
classpath Usado para indicar ao compilador o(s) caminho(s)
em que algumas classes necessárias ao correto
processo de compilação de encontram. Para o
caso de você precisar especificar mais de um
caminho, é possível usar vírgulas ou
ponto-e-vírgula no valor do atributo.
Prof. Fabrízzio Alphonsus A. M. N. Soares | Ferramentas de automação
84/108
Como gerar arquivos JAR usando Ant XIX
destdir define o diretório onde as classes compiladas
serão gravadas.
Prof. Fabrízzio Alphonsus A. M. N. Soares | Ferramentas de automação
85/108
Como gerar arquivos JAR usando Ant XX
E agora, a tarefa mais importante do build, a tarefa responsável
por gerar o arquivo jar:
1
2
3
4
5
6
7
8
9
<target name="empacotar" depends="compilar">
<mkdir dir="build/jar"/>
<jar destfile="build/jar/Empresa.jar"
basedir="${basedir}/classes">
<manifest>
<attribute name="Main-Class" value="Empresa"/>
</manifest>
</jar>
</target>
Prof. Fabrízzio Alphonsus A. M. N. Soares | Ferramentas de automação
86/108
Como gerar arquivos JAR usando Ant XXI
O primeiro passo é criar o diretório onde o arquivo jar será
gravado:
<mkdir dir="build/jar"/>
Em seguida temos a tarefa jar. Esta tarefa possui os seguintes
atributos:
1
destfile - É o caminho e nome do arquivo jar a ser criado.
2
basedir - Diretório a partir do qual os arquivos a serem
incluídos no JAR serão pesquisados.
Prof. Fabrízzio Alphonsus A. M. N. Soares | Ferramentas de automação
87/108
Como gerar arquivos JAR usando Ant
XXII
Todo arquivo jar precisa ter o arquivo de manifesto. Este arquivo
é criado com o elemento manifest:
1
2
3
<manifest>
<attribute name="Main-Class" value="Empresa"/>
</manifest>
É aqui que fornecemos o nome da classe principal do aplicativo.
Falhar em fornecer este valor fará com que o arquivo jar não
seja executado corretamente.
Prof. Fabrízzio Alphonsus A. M. N. Soares | Ferramentas de automação
88/108
Como gerar arquivos JAR usando Ant
XXIII
Após a geração do arquivo jar, o diretório classes é excluído com
a seguinte tarefa:
1
2
3
<target name="limpar">
<delete dir="classes"/>
</target>
E, finalmente, o aplicativo é executado com a seguinte tarefa:
1
2
3
<target name="executar" depends="empacotar, limpar">
<java jar="build/jar/Empresa.jar" fork="true"/>
</target>
Prof. Fabrízzio Alphonsus A. M. N. Soares | Ferramentas de automação
89/108
Como gerar arquivos JAR usando Ant
XXIV
Quando o valor true é fornecido para o atributo fork da tarefa
java, a execução do arquivo é feita em uma nova instancia da
JVM e não aquela que está sendo usada para a execução do
Ant.
Prof. Fabrízzio Alphonsus A. M. N. Soares | Ferramentas de automação
90/108
Interagindo com o Ant via console
durante a execução dos arquivos de build I
Uma das aplicações mais interessantes da comunicação com o
Ant após o início da execução do arquivo de build é solicitar
nomes de diretórios ou arquivos ou ainda solicitar confirmação
para uma tarefa a ser executada.
Prof. Fabrízzio Alphonsus A. M. N. Soares | Ferramentas de automação
91/108
Interagindo com o Ant via console
durante a execução dos arquivos de build II
A tarefa input é usada quando queremos pausar a execução do
Ant e esperar pelo pressionamento de alguma tecla ou informação do usuário. Veja um exemplo:
1
<input/>
Prof. Fabrízzio Alphonsus A. M. N. Soares | Ferramentas de automação
92/108
Interagindo com o Ant via console
durante a execução dos arquivos de build III
O simples fato de inserir esta tarefa no fluxo de execução de
um determinado alvo fará com que a execução do build seja interrompida e recomece somente quando você pressionar a tecla
Enter. É claro que é sempre uma boa idéia informar o usuário
sobre este procedimento. Assim, uma abordagem melhor é usar:
1
<input>Tecle Enter para continuar...</input>
Prof. Fabrízzio Alphonsus A. M. N. Soares | Ferramentas de automação
93/108
Interagindo com o Ant via console
durante a execução dos arquivos de build IV
Caso você desejar a confirmação do usuário antes de proceder
com a execução do arquivo de build poderá usar o seguinte
código (como um exemplo vale mais que 1000 palavras, o build
a seguir pede confirmação antes de criar um diretório e copiar
um arquivo):
1
2
3
4
5
6
7
8
9
10
<project name="teste" basedir="." default="alvo">
<target name="alvo">
<input
message="O diretorio paginas sera criado agora.
Deseja
continuar (s/n)?"
validargs="s,n"
addproperty="valor" />
<condition property="sair">
<equals arg1="n" arg2="${valor}"/>
Prof. Fabrízzio Alphonsus A. M. N. Soares | Ferramentas de automação
94/108
Interagindo com o Ant via console
durante a execução dos arquivos de build V
11
12
13
14
15
16
17
18
</condition>
<fail if="sair">O processo de build foi cancelado.</fail
>
<mkdir dir="paginas" />
<copy file="index.jsp" todir="paginas" />
</target>
</project>
Prof. Fabrízzio Alphonsus A. M. N. Soares | Ferramentas de automação
95/108
Interagindo com o Ant via console
durante a execução dos arquivos de build VI
C:\testes>ant
Buildfile: build.xml
alvo:
[input] O diretorio paginas sera criado ago
s
[mkdir] Created dir: C:\testes\paginas
[copy] Copying 1 file to C:\testes\paginas
BUILD SUCCESSFUL
Total time: 10 seconds
Prof. Fabrízzio Alphonsus A. M. N. Soares | Ferramentas de automação
96/108
Interagindo com o Ant via console
durante a execução dos arquivos de build VII
Veja que aqui a resposta para a pergunta foi “s”. Se respondermos “n” teremos outro resultado. Observe:
C:\testes>ant
Buildfile: build.xml
alvo:
[input] O diretorio paginas sera criado ago
n
BUILD FAILED
C:\testes\build.xml:11: O processo de build foi
Prof. Fabrízzio Alphonsus A. M. N. Soares | Ferramentas de automação
97/108
Interagindo com o Ant via console
durante a execução dos arquivos de build VIII
Total time: 2 seconds
Prof. Fabrízzio Alphonsus A. M. N. Soares | Ferramentas de automação
98/108
Interagindo com o Ant via console
durante a execução dos arquivos de build IX
O primeiro passo para entender este arquivo de build é começar
analisando a tarefa input:
1
2
3
4
5
<input
message="O diretorio paginas sera criado agora. Deseja
continuar (s/n)?"
validargs="s,n"
addproperty="valor" />
Prof. Fabrízzio Alphonsus A. M. N. Soares | Ferramentas de automação
99/108
Interagindo com o Ant via console
durante a execução dos arquivos de build X
Veja que aqui temos três atributos. Veja suas definições a seguir:
1
2
3
message - É a mensagem a ser exibida para o usuário;
validargs - Uma string contendo as palavras (ou letras)
válidas como argumento de entrada no console. Observe
que validarags é sensitiva à maiúsculas e minúsculas. Em
nosso exemplo aceitamos somente “s” e “n”. Se
quiséssemos aceitar também “S” e “N” bastaria
acrescentar estas letras ao valor do atributo.
addproperty - Permite criar uma variável global que
armazenará o valor informado pelo usuário. Este atributo
é muito importante, como veremos mais adiante.
Prof. Fabrízzio Alphonsus A. M. N. Soares | Ferramentas de automação
100/108
Interagindo com o Ant via console
durante a execução dos arquivos de build XI
Logo após o elemento input temos uma condição:
1
2
3
<condition property="sair">
<equals arg1="n" arg2="${valor}"/>
</condition>
Prof. Fabrízzio Alphonsus A. M. N. Soares | Ferramentas de automação
101/108
Interagindo com o Ant via console
durante a execução dos arquivos de build XII
Esta condição define uma propriedade (ou seria melhor chamála de variável?) global chamada sair. Inicialmente o valor para
esta propriedade é false. Dentro do elemento condition temos
um elemento equals que compara o valor informado pelo usuário
(presente em arg2) com um dos valores válidos como entrada.
No nosso exemplo, a propriedade sair terá o valor true se o valor
informado pelo usuário for igual a “n”.
Prof. Fabrízzio Alphonsus A. M. N. Soares | Ferramentas de automação
102/108
Interagindo com o Ant via console
durante a execução dos arquivos de build XIII
E agora o trecho mais importante: um elemento fail:
1
<fail if="sair">O processo de build foi cancelado.</fail>
Este elemento possui apenas um atributo (a mensagem a ser
exibida) e é usado para testarmos valores de propriedades para
decidir se a execução do build deverá prosseguir ou ser interrompida. Veja como testamos o valor da propriedade sair definida
anteriormente no elemento condition. É importante observar
que, se o teste efetuado no elemento fail resultar verdadeiro, a
execução do arquivo é interrompida, ou seja, nenhuma linha de
código após este elemento será executada.
Prof. Fabrízzio Alphonsus A. M. N. Soares | Ferramentas de automação
103/108
Como obter valores via console durante a
execução de um build Ant I
Nosso próximo exemplo mostra como solicitar ao usuário que
forneça o nome de um diretório a ser criado. Observe que se o
usuário não fornecer um valor, ou seja, simplesmente pressionar
Enter, o arquivo de build se encarregará de fornecer um valor
padrão para o diretório.
Prof. Fabrízzio Alphonsus A. M. N. Soares | Ferramentas de automação
104/108
Como obter valores via console durante a
execução de um build Ant II
Veja a listagem:
1
2
3
4
5
6
7
8
9
10
11
12
13
<project name="teste" basedir="." default="dir">
<target name="dir">
<input
message="Forneca um nome para o diretorio a ser
criado e
pressione Enter:"
addproperty="diretorio"
defaultvalue="paginas" />
<mkdir dir="${diretorio}" />
</target>
</project>
Prof. Fabrízzio Alphonsus A. M. N. Soares | Ferramentas de automação
105/108
Como obter valores via console durante a
execução de um build Ant III
Execute este arquivo de build e terá o resultado mostrado a
seguir:
C:\testes>ant
Buildfile: build.xml
dir:
[input] Forneca um nome para o diretorio a
pressione Enter:
estudos
[mkdir] Created dir: C:\testes\estudos
BUILD SUCCESSFUL
Prof. Fabrízzio Alphonsus A. M. N. Soares | Ferramentas de automação
106/108
Como obter valores via console durante a
execução de um build Ant IV
Total time: 6 seconds
Veja que forneci o nome “estudos” para o diretório a ser criado.
Experimente agora executar o arquivo novamente e, pressione
Enter sem informar valor algum. Veja como o diretório paginas
será criado.
O trecho mais importante deste arquivo é a propriedade defaultvalue que possibilita definir um valor default (padrão) para
a propriedade diretorio caso o usuário pressione Enter sem informar um valor:
Prof. Fabrízzio Alphonsus A. M. N. Soares | Ferramentas de automação
107/108
Como obter valores via console durante a
execução de um build Ant V
1
2
3
4
5
<input
message="Forneca um nome para o diretorio a ser criado e
pressione Enter:"
addproperty="diretorio"
defaultvalue="paginas" />
Prof. Fabrízzio Alphonsus A. M. N. Soares | Ferramentas de automação
108/108
Download