Підручник Apache ANT

⚡ Розумний підсумок

Apache Ant — це програма з відкритим вихідним кодом, JavaІнструмент збірки на основі .NET, який автоматизує компіляцію, тестування, пакування та розгортання за допомогою одного файлу build.xml. Інтегрований з Selenium та TestNG, це робить виконання тестів повторюваним, організованим та легким для запуску будь-де.

  • 🐜 Основна роль: Ant зберігає та виконує кроки збірки послідовно з конфігураційного XML-файлу.
  • Життєвий цикл збірки: Один файл обробляє очищення, компіляцію, встановлення шляху до класів, виконання та звітування.
  • 📦 Структура build.xml: Теги проекту, цілі, завдання та властивості визначають кожен крок збірки.
  • 🔧 Установка: Встановіть змінну ANT_HOME та додайте %ANT_HOME%\bin до системного шляху.
  • 🧪 Selenium та TestNG: Ant викликає testng.xml, щоб пакети запускалися під час збірки.
  • ???? Контроль залежностей: Шляхи JAR сторонніх розробників централізовані, що підвищує надійність та розгортання.

Апач-мураха з Selenium

Що таке Apache Ant?

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

Тут виникає важливість такого інструменту створення, як Ant. Він зберігає, виконує та автоматизує всі процеси в послідовному порядку, зазначеному у файлі конфігурації Ant (зазвичай build.xml).

Апач Мураха

Перевага збірки Ant

  1. Ant створює життєвий цикл програми, тобто очищає, компілює, встановлює залежність, виконує, звітує тощо.
  2. Залежність стороннього API може встановлювати Ant, тобто шлях до класу іншого файлу Jar встановлюється файлом збірки Ant.
  3. Створено повну програму для наскрізної доставки та розгортання.
  4. Це простий інструмент збирання, де всі конфігурації можна виконати за допомогою файлу XML і який можна виконати з командного рядка.
  5. Це робить ваш код чистим, оскільки конфігурація відокремлена від фактичної логіки програми.

Як встановити Ant

Кроки для встановлення Ant Windows полягає в наступному

Крок 1) Перейдіть до https://ant.apache.org/bindownload.cgi Або завантажте файл .zip із apache-ant-1.9.4-bin.zip

Встановити Ant

Крок 2) Розархівуйте папку, перейдіть і скопіюйте шлях до кореня розархівованої папки

Встановити Ant

Крок 3) Перейдіть до «Пуск» -> «Комп'ютер» -> клацніть тут правою кнопкою миші та виберіть «Властивості», а потім натисніть «Додаткові параметри системи».

Встановити Ant

Крок 4) Відкриється нове вікно. Натисніть кнопку «Змінна середовища…».

Встановити Ant

Крок 5) Натисніть кнопку «Новий…» і встановіть назву змінної як «ANT_HOME», а значення змінної — як кореневий шлях до розархівованої папки та натисніть «ОК».

Встановити Ant

Крок 6) тепер виберіть зі списку змінну «Шлях», натисніть «Редагувати» та додайте; %ANT_HOME%\bin.

Встановити Ant

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

Крок 7) Щоб перевірити версію вашого Ant за допомогою командного рядка:

Ant – версія

Встановити Ant

Розуміння Build.xml

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

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

  • Тег проекту використовується для згадування назви проекту та атрибута basedir. 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, який використовується для перетворення шляхів усіх звичайних файлів усередині тегу path у системний формат classpath
    <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 встановить ваш основний клас для виконання
<manifest>
		<attribute name="Main-Class" value="test.Main"/>
</manifest>
  • Атрибут 'depends', який використовується, щоб зробити одну ціль залежною від іншої
<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. Встановити шлях класу для зовнішніх банок,
  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();					  
	}		
}

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"/>								
    <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.клас” в упаковці 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

Завантажте файл вище

З Ant, який керує збіркою та TestNG підключено, наступний крок підключає Ant безпосередньо до Selenium WebDriver.

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

Досі ми дізналися, що за допомогою Ant ми можемо розмістити всі сторонні jar-файли в певному місці системи та встановити їхній шлях для нашого проєкту. Використовуючи цей метод, ми встановлюємо всі залежності нашого проєкту в одному місці та робимо його надійнішим для компіляції, виконання та розгортання.

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

Тож тепер ви можете ігнорувати згаданий нижче традиційний спосіб встановлення шляхів до класів для проекту.

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

приклад:

Ми збираємося змінити попередній приклад

Крок 1) Установіть для властивості selenium.jars значення selenium-related 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 Веб-драйвер

Завантажте наведений вище файл прикладу

Поширені запитання

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 scaffold 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 з керуванням залежностями Maven та швидшими інкрементальними збірками. Вибирайте Ant переважно для підтримки існуючих скриптів збірки.

Підсумуйте цей пост за допомогою: