Apache Ant

Ameise Beschreibung des Xml.gif-Bildes. Information
Entwickelt von Apache Software Foundation
Erste Version Juli 2000 und 17. Februar 2006
Letzte Version 1.10.9 (30. September 2020)
Anzahlung git-wip-us.apache.org/repos/asf/ant.git und gitbox.apache.org/repos/asf/ant.git
Geschrieben in Java
Betriebssystem Multiplattform
Umgebung Windows , Linux
Art Produktionsmotor
Lizenz Apache-Lizenz
Webseite ant.apache.org

Ant ist Software durch die erstellte Apache Foundation , diewiederholende automatisieren soll die Software - Entwicklung Operationenwie Zusammenstellung , ErstellungDokumenten ( Javadoc ) oder Archivierung in JAR - Format, wie Make - Software.

Ant ist in Java geschrieben und sein Name ist eine Abkürzung für Another Neat Tool  " . Es wird hauptsächlich zur Automatisierung der Erstellung von Projekten in Java- Sprache verwendet , kann jedoch für jede andere Art der Automatisierung in jeder Sprache verwendet werden .

Zu den häufigsten Aufgaben gehört das Kompilieren , Generieren von HTML- Dokumentationsseiten ( Javadoc ), Generieren von Berichten, Ausführen von Zusatzwerkzeugen ( Checkstyle , FindBugs usw.) und Archivieren in verteilbarer Form ( JAR usw.).

Geschichte

Ant wurde von James Duncan Davidson  (in) entworfen, als es von Sun auf das Open-Source- Produkt übertragen wurde . Dieses Produkt und die JSP / Servlet- Engine von Sun Apache Tomcat kamen später an. Das proprietäre Tool make wurde zum Kompilieren unter dem Solaris- Betriebssystem von Sun verwendet . In der Open Source-Welt ist es jedoch nicht möglich zu steuern, auf welcher Plattform Tomcat kompiliert wird. Ant wurde einfach als betriebssystemunabhängiges Tool zum Kompilieren von Tomcat aus Anweisungen erstellt, die in einer XML- " Build-Datei " enthalten sind. Ant (Version 1.1) ist seitdem offiziell als Vollprodukt erhältlich 19. Juli 2000.

Es beginnt, das Open Source Java-Support-Projekt zu werden. Entwickler planen eine build.xml-Datei für alle Projekte. Darüber hinaus erleichterte das Tool die Integration von JUnit- Tests in den Kompilierungsprozess, sodass Entwickler eher bereit waren, sich auf testgetriebene Entwicklung und extreme Programmierung einzulassen .

Ein Beispiel für build.xml

Hier ist ein Beispiel für build.xml:

<?xml version="1.0" encoding="UTF-8"?> <project name="projetWar" basedir="." default="checkstyle"> <property name="base.dir" value="../" /> <property name="baseTool.dir" value="../../outils/" /> <property name="src.dir" value="${base.dir}src" /> <property name="build.dir" value="${base.dir}webapp/WEB-INF/classes" /> <property name="doc" location="${base.dir}doc" /> <property name="lib" location="${base.dir}lib" /> <property name="reports" value="${baseTool.dir}/rapports" /> <property name="classpath" value="${build.dir}" /> <taskdef resource="checkstyletask.properties" classpath="${baseTool.dir}checkstyle-4.0-beta6/checkstyle-all-4.0-beta6.jar" /> <target name="reports" depends="checkstyle, classcycle, findbugs, jdepend"> <echo>Génération des rapports terminé.</echo> </target> <target name="jdepend"> <delete dir="${reports}/jdepend/" /> <mkdir dir="${reports}/jdepend/" /> <java classname="jdepend.xmlui.JDepend" fork="yes"> <classpath> <fileset dir="${baseTool.dir}/jdepend/" includes="**/*.jar" /> </classpath> <arg value="-file" /> <arg value="${reports}/jdepend/jdepend-report.xml" /> <arg value="${build.dir}" /> </java> <style basedir="${reports}/jdepend/" destdir="${reports}/jdepend/" includes="jdepend-report.xml" style="${baseTool.dir}/jdepend/jdepend.xsl" /> </target> <taskdef classpath="${baseTool.dir}findbugs-0.9.1/lib/findbugs-ant.jar" name="findbugs" classname="edu.umd.cs.findbugs.anttask.FindBugsTask" /> <property name="findbugs.home" value="${baseTool.dir}findbugs-0.9.1/" /> <target name="findbugs"> <delete dir="${reports}/findbugs/" /> <mkdir dir="${reports}/findbugs/" /> <findbugs home="${findbugs.home}" output="html" outputFile="${reports}/findbugs/bcel-fb.html"> <classpath> </classpath> <sourcePath path="${src.dir}" /> <class location="${build.dir}" /> </findbugs> </target> <taskdef classpath="${baseTool.dir}/Classycle/classycle.jar" name="classycleReport" classname="classycle.ant.ReportTask" /> <target name="classcycle"> <delete dir="${reports}/classycle/" /> <mkdir dir="${reports}/classycle/" /> <classycleReport reportFile="${reports}/classycle/classycle.xml"> <fileset dir="${build.dir}"> <include name="**/*.class" /> </fileset> </classycleReport> <style in="${reports}/classycle/classycle.xml" out="${reports}/classycle/classycle.html" style="${baseTool.dir}/Classycle/reportXMLtoHTML.xsl" /> <copydir dest="${reports}/classycle/images" src="${baseTool.dir}/Classycle/images"> </copydir> </target> <target name="init"> <!-- création d'un répertoire pour la compilation --> <mkdir dir="${build.dir}" /> </target> <target name="checkstyle" description="Generates a report of code convention violations."> <delete dir="${reports}/checkstyle/" /> <mkdir dir="${reports}/checkstyle/" /> <checkstyle config="${baseTool.dir}/checkstyle-4.0-beta6/sun_checks.xml" failureProperty="checkstyle.failure" failOnViolation="false"> <classpath> <!-- use the value of the ${classpath} property in the classpath --> <pathelement path="${classpath}" /> <!-- include all jar files --> <fileset dir="${lib}"> <include name="**/*.jar" /> </fileset> <fileset dir="\var\www\jakarta-tomcat-4.0.6-LE-jdk14\common\lib"> <include name="**/*.jar" /> </fileset> </classpath> <formatter type="xml" tofile="${reports}/checkstyle/checkstyle_report.xml" /> <fileset dir="${src.dir}"> <include name="**/*.java" /> </fileset> </checkstyle> <style in="${reports}/checkstyle/checkstyle_report.xml" out="${reports}/checkstyle/index.html" style="${baseTool.dir}/checkstyle-4.0-beta6/contrib/checkstyle-noframes-sorted.xsl" /> </target> <target name="compil" depends="cleanTomcat"> <echo>Compilation des sources java</echo> <!-- compilation des sources Java --> <javac srcdir="${src.dir}" destdir="${build.dir}"> <classpath> <!-- use the value of the ${classpath} property in the classpath --> <pathelement path="${classpath}" /> <!-- include all jar files --> <fileset dir="${lib}"> <include name="**/*.jar" /> </fileset> <fileset dir="\var\www\jakarta-tomcat-4.0.6-LE-jdk14\common\lib"> <include name="**/*.jar" /> </fileset> </classpath> </javac> </target> <target name="compilJUnit"> <echo>Compilation des sources Junit</echo> <!-- compilation des sources Java --> <javac srcdir="tests" destdir="tests"> <classpath path="c:/eclipse3.1-WTP/plugins/org.junit_3.8.1/"> <!-- use the value of the ${classpath} property in the classpath --> <pathelement path="${classpath}" /> <!-- include all jar files --> <fileset dir="${lib}"> <include name="**/*.jar" /> </fileset> <fileset dir="\var\www\jakarta-tomcat-4.0.6-LE-jdk14\common\lib"> <include name="**/*.jar" /> </fileset> </classpath> </javac> </target> <target name="doc" depends="compil" description="Generation de la documentation"> <delete dir="${doc}/" /> <mkdir dir="${doc}/" /> <javadoc destdir="${doc}/" author="true" version="true" use="true" package="true"> <fileset dir="${src.dir}"> <include name="**/*.java" /> <exclude name="**/*Test*" /> </fileset> <classpath> <pathelement path="${java.class.path}" /> </classpath> </javadoc> </target> <target name="clean"> <delete dir="${build.dir}" /> </target> <target name="all" depends="init,compil, doc" description="Generation complete"> <echo message="Generation complete." /> </target> <taskdef name="pmd" classname="net.sourceforge.pmd.ant.PMDTask" classpath="${baseTool.dir}/pmd-bin-3.3/pmd-3.3/lib/pmd-3.3.jar" /> <target name="pmd"> <delete dir="${reports}/pmd/" /> <mkdir dir="${reports}/pmd/" /> <taskdef name="pmd" classname="net.sourceforge.pmd.ant.PMDTask" classpath="${baseTool.dir}/pmd-bin-3.3/pmd-3.3/lib/pmd-3.3.jar" /> <pmd rulesetfiles="rulesets/optimizations.xml"> <formatter type="xml" toFile="${reports}/pmd/report_pmd.xml"/> <fileset dir="${src.dir}"> <include name="**/*.java" /> </fileset> </pmd> <xslt in="${reports}/pmd/report_pmd.xml" style="${baseTool.dir}/pmd-bin-3.3/pmd-3.3/etc/xslt/pmd-report-per-class.xslt" out="${reports}/pmd/report_pmd.html" /> </target> </project>  

Portabilität

Eines der Hauptziele von Ant war es, das Problem der vollständigen Portabilität der Entwicklung in Java zu lösen . In einem Makefile werden die zum Ausführen einer Aufgabe erforderlichen Aktionen als Shell- Befehle angegeben , die für eine bestimmte Plattform (die der Ausführung) spezifisch sind .

Wenn Sie Ihre Anwendung auf mehreren Plattformen bereitstellen möchten, müssen Sie sie daher komplexer gestalten oder mehrere Makefiles erstellen, um jede dieser Umgebungen zu erfüllen. Ant hat dieses Problem gelöst, indem standardmäßig eine Reihe von Funktionen bereitgestellt wurden, die sich auf allen Systemen gleich verhalten.

In einem Makefile können wir beispielsweise in einer UNIX- Umgebung die folgende Regel erfüllen  :

clean: rm -rf classes/

Unter Windows wird beispielsweise dieselbe Regel geschrieben:

clean: rmdir /S /Q classes

In einer Ant-Datei ist nur eine Anweisung für alle von der Software unterstützten Systeme gleich: <delete dir="classes"/>

Einer der Hauptunterschiede zwischen Plattformen sind auch die Elementtrennzeichen in einem Dateisystem  : UNIX-Umgebungen verwenden den Schrägstrich (/), während MS Windows den Schrägstrich (\) verwendet. Ant ermöglicht Entwicklern die Auswahl der gewünschten Konvention und konvertiert je nach Plattform zur Laufzeit nahtlos.

Alternativen

  • Apache Maven  : Java-Quellkompilierung, Abhängigkeitsmanagement, Bereitstellung generierter Artefakte.
  • SCons  : Kompilierung von Java-, C- und C ++ - Quellen mithilfe von Python-Skripten.
  • Make  : Zusammenstellung und Erstellung automatisierter Dateien.
  • CMake  : Kompilierung, Erstellung automatisierter Dateien und Erstellung von Dateien für IDEs .

Anmerkungen und Referenzen

  1. "  https://projects.apache.org/json/projects/ant.json  " (abgerufen am 8. April 2020 )
  2. (de) Apache Ant 1.10.9 veröffentlicht  " ,30. September 2020(abgerufen am 28. Januar 2021 )
  3. "  CMake zum Kompilieren von Java-Code  " bei Stapelüberlauf (Zugriff auf den 2. Juni 2020 ) .

Anhänge

In Verbindung stehender Artikel

Externe Links