Учебное пособие по Apache ANT

⚡ Умное резюме

Apache Ant — это программное обеспечение с открытым исходным кодом. JavaИнструмент сборки на основе build.xml, автоматизирующий компиляцию, тестирование, упаковку и развертывание с помощью одного файла build.xml. Интегрирован с... Selenium и TestNGЭто делает выполнение тестов воспроизводимым, организованным и простым в запуске в любом месте.

  • ???? Основная роль: Ant сохраняет и выполняет этапы сборки последовательно из XML-файла конфигурации.
  • ⚙️ Жизненный цикл сборки: Один файл отвечает за очистку, компиляцию, установку пути к классам, выполнение и создание отчета.
  • 📦 Структура файла build.xml: Теги Project, target, task и property определяют каждый этап сборки.
  • 🔧 Установка: Установите переменную ANT_HOME и добавьте %ANT_HOME%\bin в системный путь.
  • 🧪 Selenium и TestNG: Ant вызывает testng.xml, чтобы тестовые наборы выполнялись во время сборки.
  • 🚀 Контроль зависимости: Пути к JAR-файлам сторонних разработчиков централизованы, что повышает надежность и упрощает развертывание.

Apache Ant с Selenium

Что такое Apache Ant?

При создании полноценного программного продукта необходимо позаботиться о различных сторонних API, их пути к классам, очистке предыдущих исполняемых двоичных файлов, компиляции нашего исходного кода, выполнении исходного кода, создании отчетов и базы кода развертывания и т. д. Если эти задачи Если выполнять один за другим вручную, это займет огромное время, и этот процесс будет подвержен ошибкам.

Здесь проявляется важность такого инструмента сборки, как Ant. Он хранит, выполняет и автоматизирует все процессы в последовательном порядке, указанном в файле конфигурации Ant (обычно build.xml).

Апачский муравей

Преимущества сборки Ant

  1. Ant создает жизненный цикл приложения, т. е. очистку, компиляцию, установку зависимостей, выполнение, отчет и т. д.
  2. Зависимость стороннего API может быть установлена ​​Ant, т.е. путь к классу другого файла Jar устанавливается файлом сборки Ant.
  3. Полное приложение создается для сквозной доставки и развертывания.
  4. Это простой инструмент сборки, в котором все конфигурации можно выполнить с использованием файла XML и запустить из командной строки.
  5. Это делает ваш код чистым, поскольку конфигурация отделена от реальной логики приложения.

Как установить Ант

Шаги по установке Ant в Windows как следует

Шаг 1) Перейдите на https://ant.apache.org/bindownload.cgi Или загрузите ZIP-файл с сайта apache-ant-1.9.4-bin.zip

Установить Муравей

Шаг 2) Разархивируйте папку, перейдите и скопируйте путь к корню разархивированной папки.

Установить Муравей

Шаг 3) Перейдите в «Пуск» -> «Компьютер» -> щелкните здесь правой кнопкой мыши и выберите «Свойства», затем нажмите «Дополнительные параметры системы».

Установить Муравей

Шаг 4) Откроется новое окно. Нажмите кнопку «Переменная среды…».

Установить Муравей

Шаг 5) Нажмите кнопку «Создать…», установите имя переменной «ANT_HOME» и значение переменной в качестве корневого пути к разархивированной папке и нажмите «ОК».

Установить Муравей

Шаг 6) теперь выберите переменную «Путь» из списка, нажмите «Изменить» и добавьте; %ANT_HOME%\bin.

Установить Муравей

Перезапустите систему один раз, и теперь вы готовы использовать инструмент сборки Ant.

Шаг 7) Чтобы проверить версию вашего Ant с помощью командной строки:

Ant-версия

Установить Муравей

Понимание Build.xml

Build.xml — наиболее важный компонент инструмента сборки Ant. Для Java проекта, все задачи, связанные с очисткой, настройкой, компиляцией и развертыванием, упоминаются в этом файле в формате XML. Когда мы выполняем этот XML-файл с помощью командной строки или любого плагина IDE, все инструкции, записанные в этот файл, будут выполняться последовательно.

Давайте разберемся с кодом примера build.XML.

  • Тег проекта используется для указания имени проекта и атрибута Basedir. Базовый каталог — это корневой каталог приложения.
    <project name="YTMonetize" basedir=".">
  • Теги свойств используются в качестве переменных в файле build.XML для использования на дальнейших этапах.
<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 теги, используемые как шаги, которые будут выполняться в последовательном порядке. Атрибут Name — это имя цели. Вы можете иметь несколько целей в одном build.xml
    <target name="setClassPath">
  • Тег пути используется для логического объединения всех файлов, находящихся в общем месте.
    <path id="classpath_jars">
  • Тег pathelement установит путь к корню общего местоположения, где хранятся все файлы.
    <pathelement path="${basedir}/"/>
  • Тег pathconvert, используемый для преобразования путей всех общих файлов внутри тега пути в системный формат пути к классам.
    <pathconvert pathsep=";" property="test.classpath" refid="classpath_jars"/>
  • Тег набора файлов, используемый для установки пути к классам для различных сторонних jar-файлов в нашем проекте
    <fileset dir="${ytoperation.dir}" includes="*.jar"/>
  • Эхо-тег используется для печати текста на консоли.
<echo message="deleting existing build directory"/>
  • Удалить тег удалит данные из указанной папки.
<delete dir="${build.dir}"/>
  • Тег mkdir создаст новый каталог
	<mkdir dir="${build.dir}"/>
  • Тег javac, используемый для компиляции исходного кода Java и перемещения файлов .class в новую папку.
        <javac destdir="${build.dir}" srcdir="${src.dir}">
	<classpath refid="classpath_jars"/>
</javac>
  • Тег jar создаст файл jar из файлов .class
	<jar destfile="${ytoperation.dir}/YTOperation.jar" basedir="${build.dir}">
  • тег манифеста установит ваш основной класс для выполнения
<manifest>
		<attribute name="Main-Class" value="test.Main"/>
</manifest>
  • Атрибут «зависит», используемый для того, чтобы одна цель зависела от другой цели
<target name="run" depends="compile">
  • Тег Java выполнит основную функцию из jar, созданного в разделе цели компиляции.
<java jar="${ytoperation.dir}/YTOperation.jar" fork="true"/>

Запустите Ant, используя Eclipse плагин

Чтобы запустить Ant из eclipse, перейдите в файл build.xml -> щелкните файл правой кнопкой мыши -> Запустить как... -> нажмите «Создать файл».

Запустите Ant, используя Eclipse Плагин

Пример

Мы возьмем небольшой пример программы, который очень четко объяснит функциональность Ant. Структура нашего проекта будет выглядеть так:

Запустите Ant, используя Eclipse Плагин

В этом примере у нас есть 4 цели

  1. Установите путь к классам для внешних jar-файлов,
  2. Очистить ранее скомпилированный код
  3. Скомпилируйте существующий Java-код
  4. Запустите код

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();					  
	}		
}

Сборка.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>				

Запустите Ant, используя Eclipse плагин

Как выполнить TestNG код с использованием Ant

Выполнить TestNG код с использованием Ant

Здесь мы создадим класс с TestNG методы и установите путь к классу для Тестирование в build.xml.

Теперь для выполнения метода testng мы создадим еще один файл testng.xml и вызовем этот файл из файла build.xml.

Шаг 1) Мы создаем Guru99AntClass.class” в пакете testAnt

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();					
	}		
}		

Шаг 2) Создайте цель для загрузки этого класса в 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>

Шаг 3) Создать testng.xml

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

Шаг 4) Создавай Target в Build.xml, чтобы запустить это TestNG код

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

Шаг 5) Полный файл 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"/>
				<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>

Шаг 6) Результат

Выполнить TestNG код с использованием Ant

Загрузите вышеуказанный файл

Сборкой занимался Ант, а... TestNG После подключения по проводу, на следующем этапе Ant подключается напрямую к Selenium ВебДрайвер.

Муравей с Selenium Вебдрайвер

К настоящему моменту мы узнали, что с помощью Ant мы можем разместить все сторонние JAR-файлы в определенном месте в системе и задать их путь для нашего проекта. Используя этот метод, мы размещаем все зависимости нашего проекта в одном месте, что делает его более надежным для компиляции, выполнения и развертывания.

Аналогично, для наших проектов тестирования, использующих селен, мы можем легко упомянуть зависимость селена в build.xml, и нам не нужно вручную добавлять путь к классу в нашем приложении.

Итак, теперь вы можете игнорировать упомянутый ниже традиционный способ установки путей к классам для проекта.

Муравей с Selenium Вебдрайвер

Пример:

Мы собираемся изменить предыдущий пример

Шаг 1) Установите для свойства selenium.jars значение jar, связанного с селеном, в папке ресурсов.

		<property name="selenium.jars" value=".\selenium"/>

Шаг 2) В целевой setClassPath добавьте файлы селена.

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

Шаг 3) Завершить сборку 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>

Шаг 4) Теперь измените ранее созданный класс. Guru99AntClass.java с новым кодом.

Здесь, в этом примере, наши шаги с использованием Selenium составляют:

  1. Перейдите на https://demo.guru99.com/test/guru99home/
  2. Прочтите все ссылки на курсы по одному.
  3. Распечатайте гиперссылки на все курсы на консоли.

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"));
      	  }
		}
}		

Шаг 5) После успешного выполнения вывод будет выглядеть так:

Муравей с Selenium Вебдрайвер

Загрузите приведенный выше файл примера

Часто задаваемые вопросы (FAQ)

Ant — это инструмент процедурной сборки, где каждый шаг выполняется вручную с помощью скриптов, в то время как Maven — декларативный инструмент, который автоматически управляет зависимостями через центральный репозиторий. Ant предоставляет больше контроля; Maven — это соглашение.

Да. Много наследия. Java и Selenium В новых проектах для сборки и непрерывной интеграции по-прежнему используется Ant. В более новых проектах часто выбирают Maven или GradleОднако Ant по-прежнему полезен для точного контроля сборки.

Apache Ant 1.10.x — это активно поддерживаемая серия, для работы которой требуется... Java Версия 8 или более поздняя. Более старая версия 1.9.x поддерживает устаревшие системы. JavaВсегда загружайте бинарные файлы с официального сайта ant.apache.org.

Да. Искусственные интеллектуальные помощники, такие как ChatGPT или Copilot, формируют целевые объекты build.xml, предлагают определения задач и объясняют ошибки. RevВнимательно изучите сгенерированный XML-код, поскольку пути и версии зависимостей все еще нуждаются в проверке.

Инструменты на основе искусственного интеллекта генерируют TestNG Они оптимизируют порядок выполнения тестов и выявляют нестабильные тесты, запускаемые через цели Ant. Они упрощают обслуживание, предлагая исправления для локаторов и автоматически анализируя отчеты о сборке.

Нет. Ant может компилировать и запускать программу в обычном режиме. Java or JUnit тоже тесты. TestNG Просто добавляет гибкую конфигурацию набора тестов через testng.xml, который Ant вызывает с помощью задачи testng во время сборки.

ANT_HOME указывает операционной системе, где установлен Ant, поэтому команда ant запускается из любой директории. При установке необходимо добавить %ANT_HOME%\bin к системному пути. Windows.

Gradle Ant обычно предпочитают для новых проектов, поскольку он сочетает в себе гибкость Ant с управлением зависимостями Maven и более быстрой инкрементальной сборкой. Ant выбирают в основном для поддержки существующих скриптов сборки.

Подведем итог этой публикации следующим образом: