antAan de slag met mier


Opmerkingen

Deze sectie geeft een overzicht van wat Ant is en waarom een ontwikkelaar het misschien wil gebruiken.

Het moet ook alle grote onderwerpen binnen Ant vermelden en een link naar de gerelateerde onderwerpen bevatten. Aangezien de documentatie voor Ant nieuw is, moet u mogelijk eerste versies van die gerelateerde onderwerpen maken.

Minimale Java-versies

Verschillende versies van Ant vereisen verschillende versies van de Java-runtime (de JRE) om te kunnen worden uitgevoerd.

Ant-versie Minimale Java-versie
1.1 tot 1.5.4 1.1
1.6.x releases 1.2
1.7.x releases 1.3
1.8.x releases 1.4
1.9.x releases 1.5
1.10.x releases 1.8

versies

Versie Publicatiedatum
1.4.1 2001/10/11
1.5.0 2002/07/10
1.5.1 2002/10/03
1.5.2 2003-03-03
1.5.3 2003/04/09
1.5.4 2003/08/12
1.6.0 2003/12/18
1.6.1 2004-02-12
1.6.2 2004-07-16
1.6.3 2005-04-28
1.6.4 2005-05-19
1.6.5 2005-06-02
1.7.0 2006-12-13
1.7.1 2008-07-09
1.8.0 2010-02-02
1.8.1 2010-04-30
1.8.2 2010-12-20
1.8.3 2012-03-13
1.8.4 2012-05-23
1.9.0 2013/03/10
1.9.1 2013/05/22
1.9.2 2013/07/12
1.9.3 2013/12/29
1.9.4 2014/04/30
1.9.5 2015/06/03
1.9.6 2015/07/02
1.9.7 2016/04/12
1.9.8 2016/12/31
1.9.9 2017/02/06
1.10.0 2016/12/31
1.10.1 2017/02/06

Bootstrap Apache Ivy

Voeg het volgende doel toe aan uw build.xml

<!-- Bootstrap ivy -->
<target name="ivy.bootstrap" description="Download Apache Ivy">

    <!-- Define the version to use -->
    <property name="ivy.version">2.4.0</property>

    <!-- Create directory if not exists -->
    <mkdir dir="${user.home}/.ant/lib" quiet="true" />

    <!-- Download it -->
    <echo message="Downloading Apache Ivy..." />
    <get dest="${user.home}/.ant/lib/ivy.jar" src="https://repo1.maven.org/maven2/org/apache/ivy/ivy/${ivy.version}/ivy-${ivy.version}.jar" />
</target>
 

Nadat u de taak ant ivy.bootstrap hebt ant ivy.bootstrap , kunt u nu afhankelijkheden oplossen met apache ivy.

<target name="ivy.resolve" description="Resolve all artifacts.">

    <!-- Define lib driectory -->
    <property name="dir.lib">lib</property>

    <!-- Create directory if not exists -->
    <mkdir dir="${dir.lib}" />

    <!-- Configure -->
    <property name="ivy.dep.file" value="ivy.xml" />
    <ivy:settings file="ivysettings.xml" />

    <!-- Retrieve to a defined pattern -->
    <echo message="Resolving dependencies..." />
    <ivy:retrieve pattern="${dir.lib}/[artifact](-[classifier]).[ext]" />
</target>
 

Definieer uw bronnen in ivy.xml

<ivy-module version="2.0">
        <info organisation="org.apache" module="java-build-tools"/>
        <dependencies>
                <dependency org="junit" name="junit" rev="4.11" />
                <dependency org="org.apache.commons" name="commons-compress" rev="1.9" />
        </dependencies>
</ivy-module>
 

En alle aangepaste opslagplaatsen in ivysettings.xml

<ivysettings>
    <settings defaultResolver="chain"/>
    <resolvers>
        <chain name="chain">
            <ibiblio name="central" m2compatible="true"/>
            <ibiblio name="github" m2compatible="true" root="http://github.com/"/>
        </chain>
    </resolvers>
</ivysettings>
 

Download uw afhankelijkheden door ant ivy.resolve .

Maak een potje

Het volgende zal dist/output.jar van de broncode in src en de bibliotheken in lib , en zal src/Main.java als de hoofdklasse.

<project name="Project" default="main" basedir=".">

    <property name="src.dir"     value="src"/>
    <property name="build.dir"   value="build"/>
    <property name="dist.dir"    value="dist"/>

    <path id="classpath">
        <fileset dir="lib" includes="**/*.jar"/>
        <pathelement path="${build.dir}"/>
    </path>

    <target name="clean">
      <delete dir="${build.dir}"/>
      <delete dir="${dist.dir}"/>
    </target>
    

    <target name="compile">
        <mkdir dir="${build.dir}"/>
        <javac srcdir="${src.dir}" destdir="${build.dir}" classpathref="classpath"/>
        <copy todir="${build.dir}">
            <fileset dir="${src.dir}" excludes="**/*.java"/>
        </copy>
    </target>

    <target name="jar" depends="compile">
        <mkdir dir="${dist.dir}"/>
        <jar destfile="${dist.dir}/${ant.project.name}.jar" basedir="${build.dir}">
            <fileset dir="${build.dir}"/>
            <restrict>
                <archives>
                    <zips>
                        <fileset dir="lib" includes="**/*.jar"/>
                    </zips>
                </archives>
            </restrict>
            <manifest>
                <attribute name="Main-Class" value="Main"/>
            </manifest>
        </jar>
    </target>

    <target name="main" depends="clean,jar"/>
</project>
 

Hallo Wereld

Voeg het volgende toe aan een bestand met de naam build.xml in uw projectmap:

<?xml version="1.0" encoding="UTF-8"?>
<project name="HelloWorld" default="main">
    <target name="main" description="this is target main">
        <echo message="Hello World" />
    </target>
</project>
 

Vanaf een opdrachtprompt op een Windows-computer wordt het uitvoeren van ant main op de volgende manier weergegeven:

$ ant main
Buildfile: C:\Users\<me>\Projects\HelloWorld\build.xml

main:
     [echo] Hello World

BUILD SUCCESSFUL
 

Ook kan de gebruiker nu het volgende commando ant als default doel naam toegevoegd aan het project. Wanneer de opdracht ant wordt uitgevoerd, zoekt deze naar het default van het project en voert het uit.

$ ant 
Buildfile: C:\Users\<me>\Projects\HelloWorld\build.xml

main:
     [echo] Hello World

BUILD SUCCESSFUL
 

Als het build-script door iemand anders is geschreven en de eindgebruiker graag wil zien welk doel hij kan uitvoeren, voert u de opdracht uit die alle doelen met beschrijvingen weergeeft.

$ ant -p
 

Installatie of instellingen

Het installeren van Ant is heel eenvoudig. Volg de onderstaande stappen om Ant op Windows-platform te installeren:

  1. Download de nieuwste ant-versie van de Apache-website

  2. Pak het bestand uit op uw machine.

  3. Stel ANT_HOME in omgevingsvariabelen in

  4. Voeg% ANT_HOME% \ bin toe aan uw omgevingsvariabele PATH.

  5. Stel CLASSPATH =% ANT_HOME% \ lib;% CLASSPATH% in

  6. Open nu de opdrachtprompt en voer ant command in. Je zou hieronder moeten zien:

    Buildfile: build.xml does not exist!
    Build failed

Als alternatief kunt u met Homebrew op macOS of Linuxbrew op Linux eenvoudig uitvoeren: brew install ant

Bij het gebruik van brew is het niet nodig om de omgevingsvariabelen in te stellen.

Verschillende Linux-distributies ondersteunen ook het installeren van Ant van hun respectieve pakketbeheerders.

Om te testen is Ant correct geïnstalleerd. Ga naar de opdrachtprompt en voer het uit

ant -version
 

Met deze opdracht wordt de Ant-versie afgedrukt en wordt ook getoond dat Ant met succes is geïnstalleerd.

De eigen pagina met installatie-instructies van Ant is beschikbaar op de Apache Ant-website .

Druk omgevingsinformatie af voor het bouwen

Het volgende is handig om buildlogs te hebben die de buildmachine en enkele parameters identificeren; gewoon je main taak is afhankelijk van deze taak af te drukken voor elke build.

<!-- Print Environment Info -->
<target name="environment">

        <!-- Get the current timestamp -->
        <tstamp>
                <format property="TODAY_UK" pattern="yyyy-MM-dd HH:mm:ss:sss zzz" locale="cn,CN" />
        </tstamp>

        <!-- Get the hostname of the system -->
        <exec executable="hostname" outputproperty="os.hostname" />

        <!-- Print a bunch of information -->
        <echo message="" />
        <echo message="  Build Information" />
        <echo message="" />
        <echo message="  OS Information" />
        <echo message="" />
        <echo message="    User       : ${user.name}" />
        <echo message="    Hostname   : ${os.hostname}" />
        <echo message="" />
        <echo message="    Name       : ${os.name}" />
        <echo message="    Version    : ${os.version}" />
        <echo message="    Build      : ${os.arch}" />
        <echo message="" />
        <echo message="" />
        <echo message="  Java Information" />
        <echo message="" />
        <echo message="    Version    : ${ant.java.version} / ${java.version}" />
        <echo message="    Java Home  : ${java.home}" />
        <echo message="" />
        <echo message="" />
        <echo message="  Current Time : ${TODAY_UK}" />
        <echo message="" />
</target>
 

Dit resulteert in de volgende uitvoer,

environment:
     [echo]
     [echo]   Build Information
     [echo]
     [echo]   OS Information
     [echo]
     [echo]     User       : <User Name>
     [echo]     Hostname   : <Host Name>
     [echo]
     [echo]     Name       : Windows 8.1
     [echo]     Version    : 6.3
     [echo]     Build      : amd64
     [echo]
     [echo]
     [echo]   Java Information
     [echo]
     [echo]     Version    : 1.8 / 1.8.0_45
     [echo]     Java Home  : C:\Program Files\Java\jdk1.8.0_45\jre
     [echo]
     [echo]
     [echo]   Current Time : 2016-04-18 00:40:11:011 EDT
 

Voer JUnit uit

Het volgende zal JUnit uitvoeren op de tests die overeenkomen met test/**/*Test.java . Hiervoor moet junit.jar in de map lib .

<project name="Project" default="junit" basedir=".">
    <path id="classpath">
        <fileset dir="lib" includes="**/*.jar"/>
        <pathelement path="build"/>
    </path>

    <target name="compile">
        <javac srcdir="test" destdir="build" classpathref="classpath"/>
    </target>

    <target name="junit" depends="compile">
        <junit fork="true" logfailedtests="false">
            <classpath refid="classpath"/>
            <batchtest>
                <fileset dir="test" includes="**/*Test.java"/>
                <formatter type="plain" usefile="false"/>
            </batchtest>
        </junit>
    </target>
</project>