Apache Ant: Porovnání verzí

Z Wikipedie, otevřené encyklopedie
Smazaný obsah Přidaný obsah
Bez shrnutí editace
Bez shrnutí editace
Řádek 142: Řádek 142:
[[da:Ant]]
[[da:Ant]]
[[de:Apache Ant]]
[[de:Apache Ant]]
[[en:Apache Ant]]
[[es:Apache Ant]]
[[es:Apache Ant]]
[[fr:Apache Ant]]
[[fr:Apache Ant]]

Verze z 17. 6. 2010, 00:15

Šablona:Infobox Software Apache Ant je nástroj pro sestavování softwarových aplikací. Umožňuje automatizovat řadu činností od kompilace, testování, až po vytvoření balíku pro distribuci. Princip Antu je shodný s unixovým nástrojem Make, avšak na rozdíl od něho se skripty píší v jazyce XML. Nástroj samotný je napsaný kompletně v jazyce Java. Z toho vyplývá jeho největší výhoda – platformní nezávislost.

Ant je podporovaný řadou vývojových prostředí. Z nejznámějších lze jmenovat Eclipse a IntelliJ IDEA. Netbeans jej používá dokonce jako výchozí nástroj pro sestavování projektů.

Ant je open source projektem organizace Apache Software Foundation. Podmínky jeho použití upravuje licence Apache License 2.0.[1]

Alternativu tvoří již zmíněný Make. Jeho nevýhodou oproti Antu je, že používá příkazy a programy hostitelského systému. Proto je přenositelnost jeho konfigurace mezi platformami velmi nízká. Druhou alternativou je komplexněji pojatý nástroj pro řízení celého životního cyklu programu – Apache Maven. Oproti Antu má řadu funkcí navíc, nicméně na některé specifické projekty ani to nemusí stačit. V takovém případě může být výhodnější použít Ant právě pro jeho snadnou rozšiřitelnost.

Historie

Autorem Antu je James Duncan Davidson. Vytvořil jej pro sestavování servletového kontejneru Apache Tomcat nezávisle na cílové platformě. První samostatná verze 1.1 byla uvolněna v červenci roku 2000.[2]

Postupem času se Ant rozšířil do řady dalších open source projektů a dnes je prakticky jedním ze standardů pro sestavování aplikací psaných v jazyce Java. Velká popularita Antu vedla i ke vzniku verzí pro .NET a jazyk PHP.

Použití

K popsání sestavovacího procesu Antu pro zvolený projekt je třeba vytvořit konfigurační soubor ve formátu XML, zpravidla nese název build.xml. Velké projekty se často skládají z dalších podprojektů a proto Ant umožňuje definovat závislosti na dílčích konfiguračních souborech. Nejprve jsou v definované hierarchii sestaveny všechny podprojekty a až poté hlavní projekt. Sestavení se provede po zavolání následujícího příkazu v adresáři projektu.

ant [cíl]

Předpokladem je správné nastavení proměnných prostředí PATH i JAVA_HOME dle dokumentace a přítomnost konfiguračního souboru build.xml v tomto adresáři. Není-li zadán parametr cíl, použije se výchozí. Následuje příklad souboru build.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project name="sampleproject" default="archive">
	<property name="version" value="1.0" />
	
	<target name="init">
		<mkdir dir="src/META-INF" />
		<mkdir dir="build/classes" />	
		<mkdir dir="dist/${version}" />
	</target>
	
	<target name="compile" depends="init">
		<javac srcdir="src" destdir="build/classes"
			includeantruntime="false"/>
	</target>
	
	<target name="archive" depends="compile">
		<manifest file="build/manifest.mf">
			<attribute name="Main-Class"
				value="org.antbook.welcome.Main"/>
		</manifest>
		<jar destfile="dist/${version}/project.jar" basedir="build/classes"
			manifest="build/manifest.mf"/>
	</target>
	
	<target name="clean" depends="init">
		<delete dir="build"/>
		<delete dir="dist/${version}"/>
	</target>
</project>

Cíle

V konfiguračním souboru build.xml jsou pomocí tagu target definovány cíle, kterých má být v rámci procesu sestavení dosaženo. Každý cíl má svůj název a kromě toho může mít definován v atributu depends také seznam závislostí na dalších cílech, které musí být vykonány před ním. V kořenovém tagu project se v atributu default udává výchozí cíl, jenž bude zpracován v případě, že Antu explicitně neurčíme jiný.

Na příkladu uvedeném výše jsou definovány cíle init, compile, archiveclean. Jako výchozí je určen cíl archive a proto bude vykonán, neurčíme-li Antu jinak. Z definovaných závislostí vyplývá, že před ním musí proběhnout cíl compile. Kompilace se ale nemůže spustit, dokud není vykonán cíl init. Proto bude sestavování ukázkového projektu probíhat přesně v opačném pořadí. Nejprve se vykoná cíl init, následně compile a nakonec archive.

Ant dokáže samostatně zpracovat libovolný z definovaných cílů, ale vždy předtím zpracuje i jeho závislosti. Zavoláme-li ho s parametrem compile, zpracuje nejprve závislost init a poté zkompiluje třídy ukázkového projektu. Dalšími cíli se již zabývat nebude.

Konstanty

Pomocí tagu property lze nastavit konstanty a tím usnadnit parametrizaci nebo potenciální úpravy souboru konfigurace v build.xml. Takto je možné načítat i proměnné prostředí či externí soubory s definicí konstant. Vždy se jedná o konstanty v pravém slova smyslu. Jakmile se jednou nastaví, další pokusy změnu hodnoty jsou ignorovány. Této vlastnosti lze využít a nastavit některé konstanty pomocí parametrů při spouštění Antu – jejich další přenastavení v build.xml bude ignorováno.[3]

Pomocí definovaných konstant je možné také podmínit vykonání některého cíle. Do tagu target se přidá atribut if a nebo unless s hodnotou odpovídající jménu konstanty. Takový cíl je poté vykonán pouze, pokud je a nebo není daná konstanta definovaná.

Úkoly

V rámci jednotlivých cílů je možné používat řadu úkolů, v terminologii Antu označených výrazem task. Úkoly jsou zodpovědné za vykonávání specifických činností sestavovacího procesu. Jsou vykonávány postupně podle jejich pořadí v rámci cíle. Je možné se setkat se třemi typy úkolů.[4]

Prvním z nich jsou úkoly vestavěné v Antu. Je jich celá řada a pokrývají všechny běžné funkce od vytvoření nebo smazání adresáře, kompilace, generování dokumentace, vytváření jar archivu, vytváření nebo validaci XML dokumentů, spouštění unit testů, spouštění programu, práce s FTP serverem, odesílání emailu, a tak dále.

Další skupinu tvoří úkoly třetích stran. Množství doplňujících úkolů do Antu vytvořili jeho uživatelé a dali veřejně k dispozici ostatním.[4]

Pokud není požadovaná funkcionalita k dispozici ani v jedné z předchozích skupin, lze si naprogramovat úkoly vlastní, jelikož Ant obsahuje otevřené a dokumentované API. Stačí vytvořit potomka třídy org.apache.tools.ant.Task, překrýt jeho metodu execute a pro všechny atributy definovat set metody. Níže uvedený příklad ukazuje, jak lze vytvořit jednoduchý úkol. Jedinou jeho funkcí je vypsání zadaného parametru message. Funguje obdobně jako vestavěný úkol echo.

package org.sampleproject;

import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Task;

public class SampleTask extends Task {

	private String message;
	
	public void setMessage(String message) {
		this.message = message;
	}

	@Override
	public void execute() throws BuildException {
		super.execute();
		log(message);
	}
}

V konfiguračním souboru build.xml je ještě nutné úkol definovat pomocí tagu taskdef. Následně již nic nebrání jeho používání.

<taskdef name="sampletask" classname="org.sampleproject.SampleTask"
	classpath="build/classes" />
<sampletask message="Hello, World!"/>

Omezení

Apache Ant má řadu využítí. Je vhodné použít ho všude tam, kde projekt přerostl jednoho vývojáře a jeho sestavení včetně testování vyžaduje komplexní přístup. Nicméně i přes zřejmé výhody se k některým věcem úplně nehodí. Jeho ovládání přes příkazovou řádku a chybové hlášky ho předurčují k používání programátorům. Není vhodné nutit koncové uživatele spouštět nebo sestavovat projekty pomocí Antu. Pokud se vyskytne problém, sestavování projektu je zastaveno a Ant vypíše chybovou hlášku. Ta bude srozumitelná pouze programátorovi.

Ant také není vhodný pro začátečníky. Vytvoření konfiguračního souboru build.xml může být poměrně pracné a pokud je cílem pouze zkompilovat pár řádků kódu nebo spustit testy, bohatě postačí IDE.

Literatura

LOUGHRAN, Steve; HATCHER, Erik. Ant in Action. 2. vyd. [s.l.]: Manning, 2007. ISBN 1-932394-80-X. 

Reference

Externí odkazy