inhoudstafel en auteursrecht
* STER *


10b. Efficiëntie met Ant

10b.1 Wat is Ant ?

Professionele ontwikkelaars trachten hun ontwikkelomgeving zo transparant mogelijk in te richten: ze willen hun energie besteden aan programmeren, niet aan het bewaren, manipuleren en onderzoeken van bestanden. Een van de krachtigste hulpmiddelen daarbij is een maketool (genaamd naar een historisch voorbeeld, het Unix-programma make). In zijn oorspronkelijke vorm dient een maketool om automatisch een uitvoerbare versie van een programma te bouwen, uitgaande van de meest recente versies van de bronbestanden, zonder overbodige compilaties.

Ant is de populairste maketool, en niet zonder reden. Het is krachtig, veelzijdig en uitbreidbaar, open source (en dus gratis en praktisch foutvrij) en het invoerformaat is XML. In deze tekst bespreken we slechts twee deelaspecten: de installatie, en het gebruik van Ant om een Java-programma te compileren.

10b.2 Ant installeren

Ant is een voorbeeld van open source software. Dat wil zeggen dat deze software geheel gratis (of tegen de kosten van het verspreiden) ter beschikking gesteld wordt van de gemeenschap, en dat de broncode eveneens verkrijgbaar is.

Ant kan gratis worden gedownload vanaf de website van het Jakarta-project. Je kan hem in twee verschillende gedaanten ("distributies") downloaden:

  1. de binaire distributie
  2. de brondistributie

Beide distributies werken precies eender, alleen de installatieprocedure is verschillend. De binaire distributie is eenvoudiger te installeren, en is vooral bedoeld voor gebruikers die niet geïnteresseerd zijn in de interne werking van Ant. De brondistributie vereist dat je de programmabestanden zelf (automatisch) genereert op je eigen computer. De brondistributie laat toe dat je gaat inspecteren wat er bij Ant onder de motorkap zit. Als je een beetje kan programmeren, kan je Ant zelfs aan je persoonlijke wensen aanpassen. In deze paragraaf beschrijven we uitsluitend de (eenvoudiger) installatieprocedure van de binaire distributie.

Stuur je browserprogramma naar de home-pagina van Ant:

  http://jakarta.apache.org/ant/

Volg dan de hyperlink Download the binary release. Op het moment dat we deze tekst schrijven, is dat een hyperlink naar versie 1.5.1, maar dat kan natuurlijk elk moment veranderen:

  http://jakarta.apache.org/builds/jakarta-ant/release/v1.5.1/bin/

De binaire download komt in drie versies: tar, gz en zip. Elk van die drie versies komt overeen met een specifiek programma voor de compressie van verzamelingen gegevensbestanden, respectievelijk tar (vooral in de Unix-wereld populair), Gnu Zip (vooral Unix, maar ook op andere platformen) en ZIP (vooral MS Windows). We beschrijven de procedure voor het downloaden en uitpakken van het zip-archief op een Windows-computer. De andere twee verlopen echter heel gelijkaardig.

Klik op de hyperlink die een bestand met de extensie .zip aangeeft (van verscheidene megabytes, niet de twee kleine hulpbestandjes eronder). Normaal zal je computer nu vragen of, en vervolgens waar, hij het bestand moet bewaren.

Save to disk, OK

Kies "Save to disk" en klik op OK. Navigeer vervolgens in de bestandsdialoog naar een plaats waar je voorlopig het archief zult bewaren. Dat is niet noodzakelijk de plaats waar je Ant zult installeren, en je kunt het archief zelfs na de installatie van Ant verwijderen.

jakarta-ant-1_5_1-bin.zip

Deze download kan wel enige tijd duren, afhankelijk van de kwaliteit van de Internet-verbinding. Na afloop moet je het zip-archief uitpakken. Dat kan bijvoorbeeld met het populaire shareware-programma WinZip. Installeer alle bestanden in de hoofdmap van een harde schijf (bijvoorbeeld de C-schijf; het archief is zodanig georganiseerd, dat alles onder een map met de naam "jakarta-ant-1.5" (of iets dergelijks) gerangschikt wordt.

Ant is nu geïnstalleerd op je computer: je hoeft geen afzonderlijk installatieprogramma te laten draaien.

10b.3 Gebruik van Ant om een Java-programma te compileren

Ant werkt op basis van buildfiles. Een buildfile is een specificatie, geschreven in een bepaalde taal, van de manier waarop een werk tot stand moet komen. Het beschrijft hoe de ene automatische taak afhankelijk is van de andere, en hoe het oproepen van de ene taak soms automatisch het oproepen van de andere taak nodig maakt, afhankelijk van de beschikbaarheid van de tussenresultaten.

Een voorbeeld. Stel dat we een Java-programma willen uitvoeren. De main-routine bevindt zich in het klassenbestand Demonstratie.class, en het programma maakt gebruik van een publieke hulpklasse in Drukker.class.

Als beide klassenbestanden aanwezig zijn, dan moet slechts het volgende commando gelanceerd worden:

java Demonstratie

Als echter één klassenbestand niet aanwezig is, of verouderd ten opzichte van zijn broncode, dan moet dat klassenbestand opnieuw gecompileerd worden, bijvoorbeeld met de opdracht

javac Demonstratie.java

Ant is in staat om automatisch na te gaan of de nodige klassenbestanden aanwezig zijn, en of ze nog actueel zijn ten opzichte van de broncode.

De buildfile is een XML-bestand dat gehoorzaamt aan een welbepaalde document type definition. In een buildfile wordt één project en minstens één target (doel) gedefinieerd.

Een project wordt gekenmerkt door drie eigenschappen:

<project name="voorbeeld" default="run">
<target name="run" depends="compile">
<java classname="Demonstratie"/>
</target>

<target name="compile">
<javac>
<src path="."/>
</javac>
</target>
</project>

Veronderstel dat bovenstaande specificatie bewaard zit in het bestand build.xml, dan kunnen we ant laten werken met de opdracht

ant run

Daarvoor moeten de volgende omgevingsvariabelen juist staan:

Je zou bijvoorbeeld kunnen voldoen aan bovenstaande eisen door bij de DOS-opdrachtregel de volgende vier opdrachten in te voeren. De eigenlijke mapnamen kunnen bij jouw installatie verschillen - kijk dit na !

set java_home=c:\jdk1.3
set ant_home=c:\jakarta-ant-1.5
set path="%ANT_HOME%\bin;c:\jdk1.3\bin;%PATH%"
set classpath=%ANT_HOME%\lib\ant.jar;.

Stel dat je wel beschikt over de twee bronbestanden Demonstratie.java en Drukker.java, maar niet over de gecompileerde klassenbestanden.

Demonstratie.java:
public class Demonstratie {
  public static void main(String[] args) {
    Drukker.drukAf("Hallo, ant");
  }
}

Drukker.java:
public class Drukker {
  public static void drukAf(String tekst) {
    System.out.println(tekst);
  }
}

Ant zal automatisch detecteren dat beide klassenbestanden ontbreken, en de compiler oproepen om ze te genereren met behulp van de bronbstanden.

De output ziet er dan als volgt uit:

C:\test>ant run
Buildfile: build.xml

compile:
    [javac] Compiling 2 source files

run:
     [java] Hallo, ant

BUILD SUCCESSFUL
Total time: 10 seconds

Als de twee klassenbestanden al bestaan, en ze zijn niet ouder dan hun bronbestand, dan is de compilatie overbodig. Ant detecteert dit automatisch. Probeer het zelf uit door het bovenstaande commando nog een tweede keer te lanceren:

C:\test>ant run
Buildfile: build.xml

compile:

run:
     [java] Hallo, ant

BUILD SUCCESSFUL
Total time: 5 seconds

Oefening

Breng een triviale verandering aan in het bestand Drukker.java (bijvoorbeeld een regel commentaar) en ga na hoe dit in de output van Ant zichtbaar wordt. Verwijder vervolgens de .class-bestanden (niet de broncode!) en kijk opnieuw naar het effect op Ant.

In voorbereiding: target om classfiles te wissen ("ant clean").


inhoudstafel en auteursrecht
* STER *

Valid HTML 4.0! Valid CSS!