Tutorial Apache ANT
โก Resumo Inteligente
O Apache Ant รฉ um software de cรณdigo aberto. JavaFerramenta de construรงรฃo baseada em - que automatiza a compilaรงรฃo, os testes, o empacotamento e a implantaรงรฃo por meio de um รบnico arquivo build.xml. Integrada com Selenium e TestNGIsso torna a execuรงรฃo de testes repetรญvel, organizada e fรกcil de executar em qualquer lugar.

O que รฉ formiga Apache?
Ao criar um produto de software completo, รฉ necessรกrio cuidar de diferentes APIs de terceiros, seu caminho de classe, limpeza de arquivos binรกrios executรกveis โโanteriores, compilaรงรฃo de nosso cรณdigo-fonte, execuรงรฃo de cรณdigo-fonte, criaรงรฃo de relatรณrios e base de cรณdigo de implantaรงรฃo, etc. feito um por um manualmente, levarรก muito tempo e o processo estarรก sujeito a erros.
Aรญ vem a importรขncia de uma ferramenta de construรงรฃo como o Ant. Ele armazena, executa e automatiza todos os processos em uma ordem sequencial mencionada no arquivo de configuraรงรฃo do Ant (geralmente build.xml).
Benefรญcio da construรงรฃo Ant
- Ant cria o ciclo de vida do aplicativo, ou seja, limpar, compilar, definir dependรชncias, executar, relatar, etc.
- A dependรชncia da API de terceiros pode ser definida pelo Ant, ou seja, o caminho de classe de outro arquivo Jar รฉ definido pelo arquivo de construรงรฃo Ant.
- Um aplicativo completo รฉ criado para entrega e implantaรงรฃo ponta a ponta.
- ร uma ferramenta de construรงรฃo simples onde todas as configuraรงรตes podem ser feitas usando arquivo XML e que pode ser executada a partir da linha de comando.
- Isso torna seu cรณdigo limpo, pois a configuraรงรฃo รฉ separada da lรณgica real do aplicativo.
Como instalar o Ant
Etapas para instalar o Ant em Windows รฉ o seguinte
Passo 1) Acesse https://ant.apache.org/bindownload.cgi Ou baixe o arquivo .zip de apache-ant-1.9.4-bin.zip
Passo 2) Descompacte a pasta e copie o caminho para a raiz da pasta descompactada
Passo 3) Vรก em Iniciar -> Computador -> clique com o botรฃo direito aqui e selecione 'Propriedades' e clique em Configuraรงรตes Avanรงadas do Sistema
Passo 4) Uma nova janela รฉ aberta. Clique no botรฃo 'Variรกvel de ambienteโฆ'.
Passo 5) Clique no botรฃo 'Novoโฆ' e defina o nome da variรกvel como 'ANT_HOME' e o valor da variรกvel como o caminho raiz para a pasta descompactada e clique em OK.
Passo 6) agora selecione a variรกvel 'Path' na lista e clique em 'Editar' e anexe; %ANT_HOME%\bin.
Reinicie o sistema uma vez e vocรช estarรก pronto para usar a ferramenta de construรงรฃo Ant agora.
Passo 7) Para verificar a versรฃo do seu Ant usando a linha de comando:
Versรฃo Ant
Compreendendo o Build.xml
Build.xml รฉ o componente mais importante da ferramenta de construรงรฃo Ant. Para Java projeto, todas as tarefas relacionadas ร limpeza, configuraรงรฃo, compilaรงรฃo e implantaรงรฃo sรฃo mencionadas neste arquivo em formato XML. Quando executamos este arquivo XML usando linha de comando ou qualquer plugin IDE, todas as instruรงรตes escritas neste arquivo serรฃo executadas de maneira sequencial.
Vamos entender o cรณdigo em um exemplo build.XML
-
A tag do projeto รฉ usada para mencionar o nome do projeto e o atributo basedir. O basedir รฉ o diretรณrio raiz de um aplicativo
<project name="YTMonetize" basedir=".">
- Tags de propriedade sรฃo usadas como variรกveis โโno arquivo build.XML para serem usadas em etapas posteriores
<property name="build.dir" value="${basedir}/build"/> <property name="external.jars" value=".\resources"/> <property name="ytoperation.dir" value="${external.jars}/YTOperation"/> <property name="src.dir"value="${basedir}/src"/>
- Target tags usadas como etapas que serรฃo executadas em ordem sequencial. O atributo Name รฉ o nome do alvo. Vocรช pode ter vรกrios alvos em um รบnico build.xml
<target name="setClassPath"> - tag path รฉ usada para agrupar logicamente todos os arquivos que estรฃo no local comum
<path id="classpath_jars"> - A tag pathelement definirรก o caminho para a raiz do local comum onde todos os arquivos sรฃo armazenados
<pathelement path="${basedir}/"/> - Tag pathconvert usada para converter caminhos de todos os arquivos comuns dentro da tag path para o formato de caminho de classe do sistema
<pathconvert pathsep=";" property="test.classpath" refid="classpath_jars"/>
- tag de conjunto de arquivos usada para definir o caminho de classe para diferentes jars de terceiros em nosso projeto
<fileset dir="${ytoperation.dir}" includes="*.jar"/>
- A tag Echo รฉ usada para imprimir texto no console
<echo message="deleting existing build directory"/>
- Excluir tag limparรก os dados de determinada pasta
<delete dir="${build.dir}"/>
- A tag mkdir criarรก um novo diretรณrio
<mkdir dir="${build.dir}"/>
- Tag javac usada para compilar o cรณdigo-fonte java e mover arquivos .class para uma nova pasta
<javac destdir="${build.dir}" srcdir="${src.dir}"> <classpath refid="classpath_jars"/> </javac>
- tag jar criarรก um arquivo jar a partir de arquivos .class
<jar destfile="${ytoperation.dir}/YTOperation.jar" basedir="${build.dir}">
- tag de manifesto definirรก sua classe principal para execuรงรฃo
<manifest> <attribute name="Main-Class" value="test.Main"/> </manifest>
- Atributo 'depends' usado para fazer com que um alvo dependa de outro alvo
<target name="run" depends="compile">
- A tag java executarรก a funรงรฃo principal do jar criado na seรงรฃo de destino de compilaรงรฃo
<java jar="${ytoperation.dir}/YTOperation.jar" fork="true"/>
Execute o Ant usando Eclipse plug-in
Para executar o Ant a partir do Eclipse, vรก para o arquivo build.xml -> clique com o botรฃo direito no arquivo -> Executar comoโฆ -> clique em Construir arquivo
Exemplo
Tomaremos um pequeno programa de amostra que explicarรก a funcionalidade do Ant de forma muito clara. Nossa estrutura de projeto serรก semelhante a -
Aqui neste exemplo temos 4 alvos
- Definir caminho de classe para jars externos,
- Limpe o cรณdigo previamente cumprido
- Compilar cรณdigo java existente
- Execute o cรณdigo
Guru99AntClass.class
package testAnt; import java.util.Date; public class Guru99AntClass { public static void main(String...s){ System.out.println("HELLO GURU99 ANT PROGRAM"); System.out.println("TODAY's DATE IS->"+ currentDate() ); } public static String currentDate(){ return new Date().toString(); } }
Construir.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <!--Project tag used to mention the project name, and basedir attribute will be the root directory of the application--> <project name="YTMonetize" basedir="."> <!--Property tags will be used as variables in build.xml file to use in further steps--> <property name="build.dir" value="${basedir}/build"/> <property name="external.jars" value=".\resources"/> <property name="ytoperation.dir" value="${external.jars}/YTOperation"/> <property name="src.dir"value="${basedir}/src"/> <!--Target tags used as steps that will execute in sequential order. name attribute will be the name of the target and < a name=OLE_LINK1 >'depends' attribute used to make one target to depend on another target --> <target name="setClassPath"> <path id="classpath_jars"> <pathelement path="${basedir}/"/> </path> <pathconvert pathsep=";"property="test.classpath" refid="classpath_jars"/> </target> <target name="clean"> <!--echo tag will use to print text on console--> <echo message="deleting existing build directory"/> <!--delete tag will clean data from given folder--> <delete dir="${build.dir}"/> </target> <target name="compile" depends="clean,setClassPath"> <echo message="classpath:${test.classpath}"/> <echo message="compiling.........."/> <!--mkdir tag will create new director--> <mkdir dir="${build.dir}"/> <echo message="classpath:${test.classpath}"/> <echo message="compiling.........."/> <!--javac tag used to compile java source code and move .class files to a new folder--> <javac destdir="${build.dir}" srcdir="${src.dir}"> <classpath refid="classpath_jars"/> </javac> <!--jar tag will create jar file from .class files--> <jar destfile="${ytoperation.dir}/YTOperation.jar"basedir="${build.dir}"> <!--manifest tag will set your main class for execution--> <manifest> <attribute name="Main-Class" value="testAnt.Guru99AntClass"/> </manifest> </jar> </target> <target name="run" depends="compile"> <!--java tag will execute main function from the jar created in compile target section--> <java jar="${ytoperation.dir}/YTOperation.jar"fork="true"/> </target> </project>
Como executar TestNG cรณdigo usando Ant
Aqui vamos criar uma classe com Teste mรฉtodos e definir o caminho da classe para Testes em build.xml.
Agora, para executar o mรฉtodo testng, criaremos outro arquivo testng.xml e chamaremos esse arquivo do arquivo build.xml.
Passo 1) Nรณs criamos um "Guru99AntClass.classโ no pacote testeAnt
Guru99AntClass.class
package testAnt; import java.util.Date; import org.testng.annotations.Test; public class Guru99AntClass { @Test public void Guru99AntTestNGMethod(){ System.out.println("HELLO GURU99 ANT PROGRAM"); System.out.println("TODAY's DATE IS->"+ currentDate() ); } public static String currentDate(){ return new Date().toString(); } }
Etapa 2) Crie um destino para carregar esta classe em Build.xml
<!-- Load testNG and add to the class path of application --> <target name="loadTestNG" depends="setClassPath"> <!โusing taskdef tag we can add a task to run on the current project. In below line, we are adding testing task in this project. Using testing task here now we can run testing code using the ant script --> <taskdef resource="testngtasks" classpath="${test.classpath}"/> </target>
Passo 3) Crie testng.xml
testeng.xml
<?xml version="1.0"encoding="UTF-8"?> <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> <suite name="YT"thread-count="1"> <test name="GURU99TestNGAnt"> <classes> <class name="testAnt.Guru99AntClass"> </class> </classes> </test> </suite>
Passo 4) Criar Target em Build.xml para executar isso TestNG cรณdigo
<target name="runGuru99TestNGAnt" depends="compile"> <!-- testng tag will be used to execute testng code using corresponding testng.xml file. Here classpath attribute is setting classpath for testng's jar to the project--> <testng classpath="${test.classpath};${build.dir}"> <!โxmlfileset tag is used here to run testng's code using testing.xml file. Using includes tag we are mentioning path to testing.xml file--> <xmlfileset dir="${basedir}" includes="testng.xml"/> </testng>
Passo 5) O Build.xml completo
<?xml version="1.0"encoding="UTF-8"standalone="no"?> <!--Project tag used to mention the project name, and basedir attribute will be the root directory of the application--> <project name="YTMonetize" basedir="."> <!--Property tags will be used as variables in build.xml file to use in further steps--> <property name="build.dir"value="${basedir}/build"/> <!-- put testng related jar in the resource folder --> <property name="external.jars" value=".\resource"/> <property name="src.dir" value="${basedir}/src"/> <!--Target tags used as steps that will execute in sequential order. name attribute will be the name of the target and 'depends' attribute used to make one target to depend on another target--> <!-- Load testNG and add to the class path of application --> <target name="loadTestNG"depends="setClassPath"> <taskdef resource="testngtasks"classpath="${test.classpath}"/> </target> <target name="setClassPath"> <path id="classpath_jars"> <pathelement path="${basedir}/"/> <fileset dir="${external.jars}" includes="*.jar"/> </path> <pathconvert pathsep=";"property="test.classpath"refid="classpath_jars"/> </target> <target name="clean"> <!--echo tag will use to print text on console--> <echo message="deleting existing build directory"/> <!--delete tag will clean data from given folder--> <delete dir="${build.dir}"/> </target> <target name="compile"depends="clean,setClassPath,loadTestNG"> <echo message="classpath:${test.classpath}"/> <echo message="compiling.........."/> <!--mkdir tag will create new director--> <mkdir dir="${build.dir}"/> <echo message="classpath:${test.classpath}"/> <echo message="compiling.........."/> <!--javac tag used to compile java source code and move .class files to a new folder--> <javac destdir="${build.dir}"srcdir="${src.dir}"> <classpath refid="classpath_jars"/> </javac> </target> <target name="runGuru99TestNGAnt"depends="compile"> <!-- testng tag will be used to execute testng code using corresponding testng.xml file --> <testng classpath="${test.classpath};${build.dir}"> <xmlfileset dir="${basedir}"includes="testng.xml"/> </testng> </target> </project>
Passo 6) saรญda
Com Ant gerenciando a compilaรงรฃo e TestNG Com a fiaรงรฃo instalada, o prรณximo passo รฉ conectar a Ant diretamente ao Selenium WebDriver.
Formiga com Selenium Driver da Web
Atรฉ agora, aprendemos que, usando o Ant, podemos colocar todos os arquivos JAR de terceiros em um local especรญfico do sistema e definir o caminho para eles em nosso projeto. Com esse mรฉtodo, reunimos todas as dependรชncias do nosso projeto em um รบnico lugar, tornando-o mais confiรกvel para compilaรงรฃo, execuรงรฃo e implantaรงรฃo.
Da mesma forma, para nossos projetos de teste usando Selenium, podemos facilmente mencionar a dependรชncia de Selenium em build.xml e nรฃo precisamos adicionar um caminho de classe manualmente em nosso aplicativo.
Portanto, agora vocรช pode ignorar a maneira tradicional mencionada abaixo de definir caminhos de classe para o projeto.
Exemplo:
Vamos modificar o exemplo anterior
Passo 1) Defina a propriedade selenium.jars como jar relacionado ao selรชnio na pasta de recursos
<property name="selenium.jars" value=".\selenium"/>
Passo 2) No setClassPath de destino, adicione os arquivos Selenium
<target name="setClassPath"> <path id="classpath_jars"> <pathelement path="${basedir}/"/> <fileset dir="${external.jars}" includes="*.jar"/> <!-- selenium jar added here --> <fileset dir="${selenium.jars}" includes="*.jar"/> </path>
Passo 3) Complete Build.xml:
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <!--Project tag used to mention the project name, and basedir attribute will be the root directory of the application--> <project name="YTMonetize" basedir="."> <!--Property tags will be used as variables in build.xml file to use in further steps--> <property name="build.dir" value="${basedir}/build"/> <!-- put testng related jar in the resource folder --> <property name="external.jars" value=".\resource"/> <!-- put selenium related jar in resource folder --> <property name="selenium.jars" value=".\selenium"/> <property name="src.dir" value="${basedir}/src"/> <!--Target tags used as steps that will execute in sequential order. name attribute will be the name of the target and 'depends' attribute used to make one target to depend on another target--> <!-- Load testNG and add to the class path of application --> <target name="loadTestNG" depends="setClassPath"> <taskdef resource="testngtasks" classpath="${test.classpath}"/> </target> <target name="setClassPath"> <path id="classpath_jars"> <pathelement path="${basedir}/"/> <fileset dir="${external.jars}" includes="*.jar"/> <!-- selenium jar added here --> <fileset dir="${selenium.jars}"includes="*.jar"/> </path> <pathconvert pathsep=";" property="test.classpath" refid="classpath_jars"/> </target> <target name="clean"> <!--echo tag will use to print text on console--> <echo message="deleting existing build directory"/> <!--delete tag will clean data from given folder--> <delete dir="${build.dir}"/> </target> <target name="compile" depends="clean,setClassPath,loadTestNG"> <echo message="classpath:${test.classpath}"/> <echo message="compiling.........."/> <!--mkdir tag will create new director--> <mkdir dir="${build.dir}"/> <echo message="classpath:${test.classpath}"/> <echo message="compiling.........."/> <!--javac tag used to compile java source code and move .class files to new folder--> <javac destdir="${build.dir}"srcdir="${src.dir}"> <classpath refid="classpath_jars"/> </javac> </target> <target name="runGuru99TestNGAnt" depends="compile"> <!-- testng tag will be used to execute testng code using corresponding testng.xml file --> <testng classpath="${test.classpath};${build.dir}"> <xmlfileset dir="${basedir}" includes="testng.xml"/> </testng> </target> </project>
Passo 4) Agora altere a classe criada anteriormente. Guru99AntClass.java com novo cรณdigo.
Aqui neste exemplo nossos passos usando Selenium como:
- Acesse https://demo.guru99.com/test/guru99home/
- Leia todos os links dos cursos um por um
- Imprima o hiperlink de todos os cursos no console.
Guru99AntClass.java:
package testAnt; import java.util.List; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.firefox.FirefoxDriver; import org.testng.annotations.Test; public class Guru99AntClass { @Test public void Guru99AntTestNGMethod(){ WebDriver driver = new FirefoxDriver(); driver.get("https://demo.guru99.com/test/guru99home/"); List<WebElement> listAllCourseLinks = driver.findElements(By.xpath("//div[@class='canvas-middle']//a")); for(WebElement webElement : listAllCourseLinks) { System.out.println(webElement.getAttribute("href")); } } }
Passo 5) Apรณs a execuรงรฃo bem-sucedida, a saรญda serรก semelhante a:
Baixe o arquivo de exemplo acima















