Apache Ant

Muurahainen Xml.gif-kuvan kuvaus. Tiedot
Kehittäjä Apache-ohjelmistosäätiö
Ensimmäinen versio Heinäkuu 2000 ja 17. helmikuuta 2006
Viimeinen versio 1.10.9 (30. syyskuuta 2020)
Tallettaa git-wip-us.apache.org/repos/asf/ant.git ja gitbox.apache.org/repos/asf/ant.git
Kirjoitettu Java
Käyttöjärjestelmä Monialustainen
Ympäristö Windows , Linux
Tyyppi Tuotantomoottori
Lisenssi Apache-lisenssi
Verkkosivusto ant.apache.org

Ant on Apache-säätiön luoma ohjelmisto, jonka tarkoituksena on automatisoida ohjelmistokehityksen toistuvat toiminnot, kuten kokoaminen , asiakirjojen luominen ( Javadoc ) tai arkistointi JAR- muodossa, kuten Make- ohjelmisto.

Ant on kirjoitettu Java-muodossa ja sen nimi on lyhenne sanoista Another Neat Tool  " . Sitä käytetään pääasiassa projektien rakentamisen automatisointiin Java- kielellä , mutta sitä voidaan käyttää minkä tahansa muun tyyppiseen automaatioon millä tahansa kielellä .

Yleisimpien tehtävien joukossa Ant sallii kokoamisen , HTML- dokumentaation sivujen luomisen ( Javadoc ), raporttien luomisen , lisätyökalujen suorittamisen ( checkstyle , FindBugs jne.), Arkistoinnin jaettavassa muodossa ( JAR jne.)

Historia

Ant on suunnitellut James Duncan Davidson  (in), kun se siirretään avoimen lähdekoodin tuotteeseen Sunilta . Tämä tuote ja Sun Apache Tomcatin JSP / Servlet- moottori saapuivat myöhemmin. Oma merkki työkalua käytettiin kokoamaan sitä Sunin Solaris käyttöjärjestelmän järjestelmässä , mutta avoimen lähdekoodin ei ole mahdollista kontrolloida, mitä alustaa käytetään koota Tomcat. Ant luotiin yksinkertaisesti käyttöjärjestelmästä riippumattomaksi työkaluksi Tomcatin kokoamiseksi XML- rakennustiedostoon sisältyvistä direktiiveistä . Ant (versio 1.1) on ollut virallisesti saatavana täystuotteena vuodesta19. heinäkuuta 2000.

Siitä alkaa tulla avoimen lähdekoodin Java-tukiprojekti; kehittäjät suunnittelevat build.xml-tiedoston kaikille projekteille. Lisäksi työkalu helpotti JUnit- testauksen integrointia kokoamisprosessiin, jolloin kehittäjät halusivat omaksua testausohjatun kehityksen ja äärimmäisen ohjelmoinnin .

esimerkki build.xml-tiedostosta

Tässä on esimerkki build.xml-tiedostosta:

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

Siirrettävyys

Yksi Antin päätavoitteista oli ratkaista Java- kehityksen täydellinen siirrettävyys . Vuonna Makefile , tarvittavat toimenpiteet sen tehtävän suorittamiseksi on määritelty kuten kuori komentoja , jotka ovat spesifisiä tietylle alustalle (yksi toteutuksen).

Siksi, kun haluat ottaa sovelluksesi käyttöön useilla alustoilla, on tehtävä siitä monimutkaisempi tai tuottaa useita Makefile-tiedostoja, jotka täyttävät nämä ympäristöt. Ant on ratkaissut tämän ongelman tarjoamalla oletusarvoisesti joukon ominaisuuksia, jotka käyttäytyvät samalla tavalla kaikissa järjestelmissä.

Esimerkiksi Makefile-sovelluksessa voimme noudattaa seuraavaa sääntöä UNIX- ympäristössä  :

clean: rm -rf classes/

Ollessaan Windowsin esimerkiksi sama sääntö on kirjoitettu:

clean: rmdir /S /Q classes

Ant-tiedostossa vain yksi direktiivi on yhteinen kaikille ohjelmiston tukemille järjestelmille: <delete dir="classes"/>

Yksi tärkeimmistä eroista alustoille on myös kohde rajoittimien on tiedostojärjestelmä  : UNIX-ympäristöissä käyttää eteen kauttaviivaa (/), kun taas MS Windows käyttää kenoviivaa (\). Ant antaa kehittäjille mahdollisuuden valita haluamansa käytäntö ja muuntaa saumattomasti ajon aikana alustasta riippuen.

Vaihtoehdot

  • Apache Maven  : Java-lähdekokoelma, riippuvuuksien hallinta, luotujen artefaktien käyttöönotto.
  • SCons  : Java, C, C ++ -lähteiden kokoaminen Python-komentosarjojen avulla.
  • Merkki  : Automaattisten tiedostojen kokoaminen ja rakentaminen.
  • CMake  : Automaattisten tiedostojen kokoaminen, rakentaminen ja tiedostojen luominen IDE- tiedostoille .

Huomautuksia ja viitteitä

  1. "  https://projects.apache.org/json/projects/ant.json  " (käytetty 8. huhtikuuta 2020 )
  2. (en) Apache Ant 1.10.9 julkaistu  " ,30. syyskuuta 2020(käytetty 28. tammikuuta 2021 )
  3. "  CMake to compile java code  " , Stack Overflow -ohjelmassa (käytetty 2. kesäkuuta 2020 ) .

Liitteet

Aiheeseen liittyvä artikkeli

Ulkoiset linkit