Apache Ant

Apache Ant

Apache Ant Logo – Entworfen von Nick King
Basisdaten

Entwickler Apache Software Foundation
Erscheinungsjahr 19. Juli 2000
(Version 1.1)
Aktuelle Version 1.10.14[1]
(21. August 2023)
Betriebssystem Plattformunabhängig
Programmier­sprache Java[2][3]
Kategorie Build-Management-Tool
Lizenz Apache-Lizenz, Version 2.0
ant.apache.org

Apache Ant (englisch für Ameise) ist ein in Java geschriebenes Programm zum automatisierten Erzeugen von ausführbaren Computerprogrammen aus Quelltexten.

Es erfüllt den gleichen Zweck wie das sehr verbreitete Programm make, nämlich die automatisierte Erstellung von installierbaren Software-Paketen aus existierendem Quelltext, Bibliotheken und sonstigen Dateien. Ant ist Open Source, startete als Teil des Jakarta-Projekts und ist nun ein Apache-Top-Level-Projekt. Ant ist ein Apronym und steht für „Another Neat Tool“ (englisch für „Noch ein hübsches Werkzeug“). Entwickelt wurde die erste Version von James Duncan Davidson, der 1999 ein Werkzeug wie make für Java benötigte, während er die erste Jakarta-EE-Referenz-Implementierung entwickelte. Davidson gilt außerdem als Vater von Jakarta Tomcat. Für ihn steht der Name „Ant“ dafür, dass es als kleines Programm, genau wie die kleinen Ameisen, Großes leisten kann.

Im Unterschied zu make ist Ant in Java implementiert und benötigt somit zur Ausführung eine Java-Laufzeitumgebung (JRE).

Gesteuert wird Ant durch eine XML-Datei, die so genannte Build-Datei. Sie heißt standardmäßig build.xml. In der Build-Datei wird ein project (deutsch „Projekt“) definiert. Dies ist das Wurzelelement der XML-Datei. Zu einem Software-Projekt sollte genau eine Build-Datei und damit genau ein Ant-Project gehören.

Das Ant-Project enthält Targets (deutsch „Ziele“). Diese sind vergleichbar mit Funktionen in Programmiersprachen und können von außen, zum Beispiel vom Entwickler über die Kommandozeile oder die Entwicklungsumgebung, gezielt aufgerufen werden. Die Targets sollten in ihrer Gesamtheit alle bei der Arbeit mit einem Software-Projekt anfallenden Tätigkeiten abdecken. Zwischen den Targets können Abhängigkeiten definiert werden, entsprechend den Anforderungen an die Abhängigkeiten. Beim Aufrufen eines Targets löst Ant diese Abhängigkeiten auf und arbeitet die Targets entsprechend ab. Wenn man ein Target definiert hat, welches direkt oder indirekt Abhängigkeiten zu anderen Targets hat, so genügt es, dieses aufzurufen und Ant führt dann alle notwendigen Arbeitsschritte in der richtigen Reihenfolge aus.

Im Project kann ein Target als Default-Target angegeben werden. Dies ist normalerweise das Target, das aus dem Rohzustand oder einem Zwischenzustand des Software-Projektes die jeweils nötigen Schritte durchführt, um einen lauffähigen Zustand herzustellen.

Ein Target besteht aus Aufrufen von Tasks (deutsch „Aufgaben“). Sie sind vergleichbar mit Befehlen in Programmiersprachen.

Syntax und Schnittstellen

[Bearbeiten | Quelltext bearbeiten]

Da es sich bei der Build-Datei um eine XML-Datei handelt, hängt ihre Bedeutung nicht von Tabulatorzeichen, Leerzeichen oder Pfadtrennzeichen ab, die auf unterschiedlichen Betriebssystemen unterschiedlich definiert sind. Dies ist insbesondere eine Verbesserung gegenüber den von make benutzten Makefiles.

Ant ist ein offenes System mit definierten Schnittstellen, wodurch es z. B. durch selbst erstellte Tasks beliebig erweitert werden kann. Viele Java-Werkzeuge unterstützen Ant. Außerdem lässt es sich auch in eigene Anwendungen – z. B. Installationsprogramme – einbinden, um verschiedenste meist Batch-artige Aufgaben zu übernehmen.

Häufig verwendete Tasks

[Bearbeiten | Quelltext bearbeiten]

Ant enthält über 150 Tasks, wobei man auch eigene Tasks in Java selbst programmieren kann. Diese Liste enthält einige eingebaute (englisch built-in) Tasks von Ant.

  • javac zum Kompilieren von Quellcode.
  • copy zum Kopieren von Dateien.
  • delete zum Löschen von Dateien oder Verzeichnissen.
  • mkdir zum Erstellen von Verzeichnissen.
  • junit für automatisierte (JUnit-)Tests.
  • move zum Umbenennen von Dateien oder Verzeichnissen.
  • exec zum Ausführen von System-Programmen. Achtung: Bei Benutzung dieses Tasks begibt man sich häufig in die Abhängigkeit eines Betriebssystems!
  • zip zum Zippen, also zum Komprimieren von Dateien.
  • cvs zum Durchführen von CVS-Operationen.
  • mail zum Versenden von E-Mails.
  • replace zum Ersetzen von Text in Dateien.

Flexibel einsetzbar ist auch der vordefinierte Task Xslt zur Transformation einer XML-Datei in z. B. eine HTML-Datei unter Verwendung einer gegebenen XSLT-Datei.

Beispiele für Targets

[Bearbeiten | Quelltext bearbeiten]

Während Tasks als Java-Klassen implementiert sind, werden Targets in XML definiert und rufen Tasks auf. Es können auch eigene Tasks in Form von Java-Klassen erstellt werden.

Der folgende Ausschnitt aus einer typischen Build-Datei zeigt zwei Targets: build erzeugt ein Verzeichnis und kompiliert eine Menge von Java-Klassen dort hinein. Es hängt von einem anderen Target clean ab, das zuvor einige Verzeichnisse und Dateien löscht, um Überbleibsel früherer Aufrufe zu beseitigen.

<?xml version="1.0"?>
 <project name="Demo" basedir="." default="build">
  <property name="build.classes" value="bin" />
  <property name="build.lib" value="lib" />
  <property name="java.dir" value="." />
  <property name="name" value="Wikipedia-Demo" />
  <property name="manifest" value="manifest" />

  <path id="classpath">
      <pathelement location="." />
  </path>

  <!-- Anwendung bauen  -->
  <target name="build" depends="clean" description="Baut die komplette Anwendung">
    <!-- Verzeichnis anlegen -->
    <mkdir dir="${build.classes}"/>

    <!-- Quelltext kompilieren -->
    <javac srcdir="${java.dir}"
           destdir="${build.classes}"
           debug="false"
           deprecation="true"
           optimize="true" >
      <classpath refid="classpath" />
    </javac>

    <!-- Kopiert notwendige Dateien -->
    <copy todir="${build.classes}">
      <fileset dir="${java.dir}">
        <include name="**/*.properties" />
        <include name="**/*.gif" />
      </fileset>
    </copy>

    <!-- Baut die JAR-Datei -->
    <jar jarfile="${build.lib}/${name}.jar" manifest="${manifest}">
      <fileset dir="${build.classes}"/>
    </jar>
  </target>

  <!-- Aufräumen  -->
  <target name="clean" description="Räumt die temporär angelegten Dateien weg">
    <!-- Löscht Dateien -->
    <delete dir="${build.dir}" />
    <delete dir="${dist.base}" />
    <delete dir="${defaultdist.dir}" />
    <delete>
      <fileset dir="." includes="**/*~" defaultexcludes="no"/>
    </delete>
  </target>
</project>

Die mit einem Dollar-Zeichen ($) versehenen Bereiche stellen Properties dar. Es handelt sich dabei um vorher im Projekt oder in anderen Targets definierte Variablen.

Einzelnachweise

[Bearbeiten | Quelltext bearbeiten]
  1. [ANNOUNCE] Apache Ant 1.10.14 released. 21. August 2023 (englisch, abgerufen am 19. Dezember 2023).
  2. The ant Open Source Project on Open Hub: Languages Page. In: Open Hub. (abgerufen am 21. September 2018).
  3. projects.apache.org. (abgerufen am 8. April 2020).