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.

  • ???? Funรงรฃo principal: O Ant armazena e executa etapas de compilaรงรฃo sequencialmente a partir de um arquivo de configuraรงรฃo XML.
  • โš™๏ธ Ciclo de vida da compilaรงรฃo: Um รบnico arquivo gerencia as funรงรตes de limpeza, compilaรงรฃo, configuraรงรฃo do classpath, execuรงรฃo e geraรงรฃo de relatรณrios.
  • ๐Ÿ“ฆ Estrutura do arquivo build.xml: As tags de projeto, alvo, tarefa e propriedade definem cada etapa da construรงรฃo.
  • ๐Ÿ”ง Instalaรงรฃo: Defina a variรกvel ANT_HOME e adicione %ANT_HOME%\bin ao caminho do sistema.
  • ๐Ÿงช Selenium e TestNG: O Ant invoca o testng.xml para que os conjuntos de testes sejam executados durante a compilaรงรฃo.
  • ๐Ÿš€ Controle de dependรชncia: Os caminhos de JAR de terceiros sรฃo centralizados, melhorando a confiabilidade e a implantaรงรฃo.

Apache Ant com Selenium

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).

Formiga Apache

Benefรญcio da construรงรฃo Ant

  1. Ant cria o ciclo de vida do aplicativo, ou seja, limpar, compilar, definir dependรชncias, executar, relatar, etc.
  2. 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.
  3. Um aplicativo completo รฉ criado para entrega e implantaรงรฃo ponta a ponta.
  4. ร‰ 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.
  5. 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

Instalar formiga

Passo 2) Descompacte a pasta e copie o caminho para a raiz da pasta descompactada

Instalar formiga

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

Instalar formiga

Passo 4) Uma nova janela รฉ aberta. Clique no botรฃo 'Variรกvel de ambienteโ€ฆ'.

Instalar formiga

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.

Instalar formiga

Passo 6) agora selecione a variรกvel 'Path' na lista e clique em 'Editar' e anexe; %ANT_HOME%\bin.

Instalar formiga

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

Instalar formiga

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

Execute o Ant usando Eclipse Plugin

Exemplo

Tomaremos um pequeno programa de amostra que explicarรก a funcionalidade do Ant de forma muito clara. Nossa estrutura de projeto serรก semelhante a -

Execute o Ant usando Eclipse Plugin

Aqui neste exemplo temos 4 alvos

  1. Definir caminho de classe para jars externos,
  2. Limpe o cรณdigo previamente cumprido
  3. Compilar cรณdigo java existente
  4. 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>				

Execute o Ant usando Eclipse plug-in

Como executar TestNG cรณdigo usando Ant

Execute 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

Execute TestNG cรณdigo usando Ant

Baixe o arquivo acima

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.

Formiga com Selenium Driver da Web

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:

  1. Acesse https://demo.guru99.com/test/guru99home/
  2. Leia todos os links dos cursos um por um
  3. 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:

Formiga com Selenium Driver da Web

Baixe o arquivo de exemplo acima

Perguntas Frequentes

O Ant รฉ uma ferramenta de construรงรฃo procedural onde vocรช cria scripts para cada etapa manualmente, enquanto o Maven รฉ declarativo e gerencia dependรชncias automaticamente por meio de um repositรณrio central. O Ant oferece mais controle; o Maven oferece convenรงรตes.

Sim. Muitos legados Java e Selenium Os projetos ainda dependem do Ant para compilaรงรตes e integraรงรฃo contรญnua. Projetos mais recentes geralmente optam pelo Maven ou Gradle, mas o Ant continua sendo รบtil para um controle de compilaรงรฃo preciso.

O Apache Ant 1.10.x รฉ a sรฉrie com manutenรงรฃo ativa e requer Java 8 ou posterior. A linha 1.9.x mais antiga oferece suporte a versรตes anteriores. JavaBaixe sempre os arquivos binรกrios do site oficial ant.apache.org.

Sim. Assistentes de IA como o ChatGPT ou o Copilot criam arquivos build.xml, sugerem definiรงรตes de tarefas e explicam erros. RevAnalise cuidadosamente o XML gerado, pois os caminhos e as versรตes das dependรชncias ainda precisam ser verificados.

Ferramentas baseadas em IA geram TestNG Eles otimizam a ordem dos testes, identificam testes instรกveis โ€‹โ€‹acionados por alvos do Ant e reduzem a necessidade de manutenรงรฃo, sugerindo correรงรตes de localizadores e analisando relatรณrios de compilaรงรฃo automaticamente.

Nรฃo. O Ant pode compilar e executar cรณdigo puro. Java or JUnit testes tambรฉm. TestNG Simplesmente adiciona configuraรงรฃo flexรญvel do conjunto de testes por meio do arquivo testng.xml, que o Ant invoca usando a tarefa testng durante a compilaรงรฃo.

A variรกvel de ambiente ANT_HOME informa ao sistema operacional onde o Ant estรก instalado, permitindo que o comando ant seja executado a partir de qualquer diretรณrio. Vocรช adiciona %ANT_HOME%\bin ao PATH do sistema durante a instalaรงรฃo. Windows.

Gradle Geralmente, o Ant รฉ preferido para novos projetos porque combina a flexibilidade do Ant com o gerenciamento de dependรชncias do Maven e builds incrementais mais rรกpidos. Escolha o Ant principalmente para manter scripts de build existentes.

Resuma esta postagem com: