Περιγραφή του Apache Ant Βασίλης Στούµπος stoumpos@di.uoa.gr αίµων, Τεύχος 4 1η Μαρτίου 2004
Περίληψη Εισαγωγή Εγκατάσταση Χρήση Ειδικές περιπτώσεις αίµων, Τεύχος 4 Περιγραφή Ant 2/37
Περίληψη Εισαγωγή Περιγραφή Εκδόσεις Εγκατάσταση Χρήση Ειδικές περιπτώσεις αίµων, Τεύχος 4 Περιγραφή Ant 3/37
Τί είναι το Ant; Apache Ant is a Java based build tool. In theory, it is kind of like make, without make s wrinkles. Το Apache Ant είναι ένα Java εργαλείο κατασκευής εκδόσεων προγραµµάτων. Στην ϑεωρία είναι κάτι σαν το make, χωρίς τις «παραξενιές» του make. αίµων, Τεύχος 4 Περιγραφή Ant 4/37
Ψήφοι... Κατά Yet Another Build Tool! Ενα άλλο make! Υπέρ Επεκτάσιµο και ανεξάρτητο πλατφόρµας. Ξέρει από ϐέσπα (δηλ. Java).? εν Ξέρω/ εν Απαντώ ηλαδή το gcc δεν ϕτάνει; το Visual Studio το κάνει ήδη! αίµων, Τεύχος 4 Περιγραφή Ant 5/37
Βραβεία και Άλλα The JavaWorld Editors Choice Award for Most Useful Java Community Developed Technology. The Java Developer s Journal Editors Choice Award. Java Pro Reader s Choice award for Most Valuable Java Deployment Technology. Ενα από τα κύρια προγράµµατα (top project) του Apache Software Foundation. Υποστήριξη από τα περισσότερα περιβάλλοντα ανάπτυξης (IDE). Υιοθέτηση από τα περισσότερα προγράµµατα ΕΛ/ΑΚ. Το αδερφάκι Maven. Η Microsoft ϑα ανακοινώσει το MSBuild. αίµων, Τεύχος 4 Περιγραφή Ant 6/37
Γιατί Τόσο Ενδιαφέρον; Ελεγχος της διαδικάσιας µεταγλώττισης, ελέγχου, και εγκατάστασης (build/test/deploy). Βασικό εργαλείο της µεθοδολογίας συνεχούς ολοκληρωσής (continuous integration). Ο καλύτερος τρόπος για τα παραπάνω σε Java! αίµων, Τεύχος 4 Περιγραφή Ant 7/37
Εκδόσεις Συµβατότητα µε προγενέστερες εκδόσεις (backwards compatibility)...... ακόµα και εις ϐάρος διορθώσεων/βελτιώσεων. Εκδοση 2.0: Προγραµµατισµός από την αρχή. Καθαρότερο, γρηγορότερο, και ελάχιστα ασύµβατο µε τις εκδόσεις 1.x. Μηχανές: Mutant και Myrmidion. Ακυρώνεται η ϕιλοσοφία της 2.0 τρέχουσα 1.6 επόµενη 1.7 ή 2.0 ή 3.0 :). Οι εκδόσεις από την 1.6 και µετά απαιτούν Java 1.2. αίµων, Τεύχος 4 Περιγραφή Ant 8/37
Περίληψη Εισαγωγή Εγκατάσταση Ρυθµίσεις Πλατφόρµες Χρήση Ειδικές περιπτώσεις αίµων, Τεύχος 4 Περιγραφή Ant 9/37
Εγκατάσταση Μεταφόρτωση (download) από το http://ant.apache.org. Κατάλογοι bin Εκτελέσιµα scripts. lib Αρχεία jar του Ant και άλλες ϐιβλιοθήκες. docs Τεκµηρίωση. etc XSL αρχεία για διάφορα εργαλεία. Απαραίτητα είναι µόνο τα bin και lib. αίµων, Τεύχος 4 Περιγραφή Ant 10/37
Ρύθµιση Χρησιµοποιούµε νέο κετάλογο /tools/ant. Προσθέτουµε τον κατάλογο /tools/ant/bin στο PATH. Θέτουµε την µεταβλητή περιβάλλοντος ANT_HOME στο όνοµα του καταλόγου που εγκατασήσαµε το Ant. Θέτουµε την µεταβλητή JAVA_HOME στο όνοµα του καταλόγου που έχουµε εγκαταστήσει τη Java. Προσθέτουµε στο CLASSPATH επιπλέον ϐιβλιοθήκες αφορά µόνο σε ειδικά tasks του Ant, όχι στην γενική περίπτωση. αίµων, Τεύχος 4 Περιγραφή Ant 11/37
Κονσόλα /tools/> ls ant.tar.gz ant.tar.gz /tools/> gunzip < ant.tar.gz tar xvf - /tools/> ls -F ant/ /tools/> setenv ANT_HOME /tools/ant >>.cshrc /tools/> setenv JAVA_HOME /usr/local/jdk-1.4.2 >>.cshrc /tools/> set path=( $path $ANT_HOME/bin ) >>.cshrc /tools/> source.cshrc /tools/> java -version java version "1.4.2" Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2-b28) Java HotSpot(TM) Client VM (build 1.4.2-b28, mixed mode) /tools/> ant -version Apache Ant version 1.5.3 compiled on April 16 2003 αίµων, Τεύχος 4 Περιγραφή Ant 12/37
ιαφορετικές Πλατφόρµες Unix: ικαιώµατα αρχείων (<chmod>). Συµβολικοί σύνδεσµοι. Windows 9x/Me: Μεγάλα ονόµατα αρχείων. Windows: Πεζά-κεφαλαία ονόµατα αρχείων. Κλειδώµατα Explorer. Cygwin: Φρίκη! Μην το χρησιµοποιήσετε! (cygpath) MacOS X: Βλέπε Unix. Novell Netware: Επιπλέον αρχικές ϱυθµίσεις. αίµων, Τεύχος 4 Περιγραφή Ant 13/37
Περίληψη Εισαγωγή Εγκατάσταση Χρήση οµή Αρχείων Στόχοι και Εξαρτήσεις Παράδειγµα Ειδικές περιπτώσεις αίµων, Τεύχος 4 Περιγραφή Ant 14/37
Αρχεία build (Buildfile) Τα αρχεία build είναι XML αρχεία. Τυπικό όνοµα build.xml. Σε κάθε αρχείο build περιέχονται: Ενα πρόγραµµα (project). Τουλάχιστον ένας στόχος (target) ένας είναι ο προκαθορισµένος. Οι στόχοι περιέχουν ενέργειες (task). Κάθε ενέργεια µπορεί να έχει ένα χαρακτητιρτικό id. αίµων, Τεύχος 4 Περιγραφή Ant 15/37
οµή αρχείου build <?xml version="1.0"?> <project > <target >... </ target >... <target > <task > </task> <task id="..."> </task> <task/> </target >... <target >... </ target > </project > αίµων, Τεύχος 4 Περιγραφή Ant 16/37
<project> Παράδειγµα project: <project name="myproject" default="dist" basedir="."> <description > A simple example build f i l e. </description > <! set global properties for this build > <property name="src" location="${basedir}/src"/> <property name="build" location="${basedir}/build"/> <property name="dist" location="dist"/>... </project > αίµων, Τεύχος 4 Περιγραφή Ant 17/37
Βοήθεια για ένα project /myproject/> ls build.xml build.xml /myproject/> ant -projecthelp Buildfile: build.xml A simple example build file. Main targets: clean compile dist clean up compile the source generate the distribution Default target: dist αίµων, Τεύχος 4 Περιγραφή Ant 18/37
<target> Παράδειγµα target: <target name="compile" depends="init" description="compile the source">... </target > Περιγραφή της µεταγλώττισης. Τα κατάλληλα tasks περιέχονται για να την πραγµατοποιήσουν. αίµων, Τεύχος 4 Περιγραφή Ant 19/37
Εξαρτήσεις Στόχων <target name="a"/> <target name="b" depends="a"/> <target name="c" depends="b"/> <target name="d" depends="c,b,a"/> Εκτέλεση στόχου D σηµάινει...... εκτέλεση στόχων A, B, C, D. Λάθος: C, B, A, D! αίµων, Τεύχος 4 Περιγραφή Ant 20/37
Άλλες υνατότητες Εκτέλεση υπό Συνθήκη: < t a r g e t name="build-module-a" i f ="module-a-present"/> < t a r g e t name="build-own-fake-module-a" unless="module-a-present"/> Περιγραφή Στόχου (εµφάνιση µε -projecthelp): < t a r g e t name="mytarget" description="sample target"/> Εσωτερικοί Στόχοι (αδύνατη η εκτέλεση από κονσόλα): <target name="-internal"/> αίµων, Τεύχος 4 Περιγραφή Ant 21/37
<task> Γενική µορφή: <taskname id="id" attribute1="value1" attribute2="value2"... / > Εσωτερικές ενέργειες (built in tasks). Πρόσθετες ενέργειες (optional tasks). Ειδικές ενέργειες (custom tasks)! αίµων, Τεύχος 4 Περιγραφή Ant 22/37
Ιδιότητες Ενα πρόγραµµα µπορεί να έχει πολλές ιδιότητες. Ανάκτηση τιµής µε ${property-name}. Οι ιδιότητες τίθενται µε το στόχο <property> µόνο µία ϕορά. Εσωτερικές ιδιότητες: Ιδιότητες συστήµατος Java, όπως ${os.name}. Περισσότερα στο System.getProperties(). Ιδιότητες του Ant: { basedir: Απόλυτο µονοπάτι στη ϱίζα του προγράµµατος. { ant.file: Απόλυτο µονοπάτι στο αρχείο build. { ant.version: Εκδοση του Ant. { ant.project.name: Ονοµα προγράµµατος. { ant.java.version: Εκδοση JVM. αίµων, Τεύχος 4 Περιγραφή Ant 23/37
Στόχος Πληροφορίας <target name="info"> <echo > "Ant Properties" </echo> <echo message="basedir: ${basedir}"/> <echo message="ant.file: ${ant.file}"/> <echo message="ant.version: ${ant.version}"/> <echo message="ant.project.name: ${ant.project.name}"/> <echo message="ant.java.version: ${ant.java.version}"/> <echo > message="project Properties" </echo> <echo message="src =${src}"/> <echo message="build=${build}"/> <echo message="dist =${dist}"/> </target > αίµων, Τεύχος 4 Περιγραφή Ant 24/37
Εκτέλεση Στόχου /myproject> ant info Buildfile: build.xml info: [echo] Ant Properties [echo] basedir: /home/users/stoumpos/myproject [echo] ant.file: /home/users/stoumpos/myproject/build.xml [echo] ant.version: Apache Ant version 1.5.3 compiled on April 16 2003 [echo] ant.project.name: MyProject [echo] ant.java.version: 1.4 [echo] Project Properties [echo] src =/home/users/stoumpos/myproject/src [echo] build=/home/users/stoumpos/myproject/build [echo] dist =/home/users/stoumpos/myproject/dist BUILD SUCCESSFUL Total time: 2 seconds αίµων, Τεύχος 4 Περιγραφή Ant 25/37
Παράδειγµα Αρχείου build (1/4) <project name="myproject" default="dist" basedir="."> <description > simple example build f i l e </description > <! set global properties for this build > <property name="src" location="src"/> <property name="build" location="build"/> <property name="dist" location="dist"/> αίµων, Τεύχος 4 Περιγραφή Ant 26/37
Παράδειγµα Αρχείου build (2/4) <target name="init"> <! Create the time stamp > <tstamp/> <! Create the build d i r e c t o r y structure used by compile > <mkdir dir="${build}"/> </target > <target name="compile" depends="init" description="compile the source " > <! Compile the java code from ${ src } into ${ build } > <javac srcdir="${src}" destdir="${build}"/> </target > αίµων, Τεύχος 4 Περιγραφή Ant 27/37
Παράδειγµα Αρχείου build (3/4) <target name="dist" depends="compile" description="generate the distribution" > <! Create the distribution directory > <mkdir dir="${dist}/lib"/> <! Put everything in ${ build } i nt o the MyProject ${DSTAMP}. jar f i l e > <jar j a r f i l e ="${dist}/lib/myproject-${dstamp}.jar" basedir="${build}"/> </target > αίµων, Τεύχος 4 Περιγραφή Ant 28/37
Παράδειγµα Αρχείου build (4/4) <target name="clean" description="clean up" > <! Delete the ${ build } and ${ dist } directory trees > <delete dir="${build}"/> <delete dir="${dist}"/> </target > </project > αίµων, Τεύχος 4 Περιγραφή Ant 29/37
Τυπική Χρήση (1/4) /home/users/stoumpos/myproject/> ant -f build.xml -projecthelp Buildfile: build.xml A simple example build file. Main targets: clean compile dist clean up compile the source generate the distribution Default target: dist αίµων, Τεύχος 4 Περιγραφή Ant 30/37
Τυπική Χρήση (2/4) /home/users/stoumpos/myproject/> ant clean Buildfile: build.xml clean: [delete] Deleting directory /home/users/stoumpos/myproject/build [delete] Deleting directory /home/users/stoumpos/myproject/dist BUILD SUCCESSFUL Total time: 2 seconds αίµων, Τεύχος 4 Περιγραφή Ant 31/37
Τυπική Χρήση (3/4) /home/users/stoumpos/myproject/> ant Buildfile: build.xml init: [mkdir] Created dir: /home/users/stoumpos/myproject/build compile: [javac] Compiling 1 source file to /home/users/stoumpos/mypro ject/build dist: [mkdir] Created dir: /home/users/stoumpos/myproject/dist/lib [jar] Building jar: /home/users/stoumpos/myproject/dist/lib/ MyProject-20040301.jar BUILD SUCCESSFUL Total time: 4 seconds αίµων, Τεύχος 4 Περιγραφή Ant 32/37
Περίληψη Εισαγωγή Εγκατάσταση Χρήση Ειδικές περιπτώσεις Φίλτρα CLASSPATH Patern Set αίµων, Τεύχος 4 Περιγραφή Ant 33/37
Φίλτρα Αντικατάσταση όλων των @token@ µε µια τιµή. Κατά την αντιγραφή αρχείων. Παράδειγµα 1: < f i l t e r token="year" value="2000"/> < f i l t e r token="version" value="2.3"/> <copy todir="\${dest.dir}" f i l t e r i n g ="true"> < f i l e s e t dir="\${src.dir}"/> </copy> Παράδειγµα 2: < f i l t e r f i l t e r s f i l e ="deploy\_env.properties"/> αίµων, Τεύχος 4 Περιγραφή Ant 34/37
CLASSPATH Προσθήκη στο CLASSPATH: <classpath > <pathelement path="${classpath}"/> <pathelement location="lib/helper.jar"/> </classpath > Συντόµευση για τον ορισµό CLASSPATH: <classpath path="\${build}; ${extlib}/tool.jar"/> αίµων, Τεύχος 4 Περιγραφή Ant 35/37
Pattern Set Παράδειγµα 1: κώδικας <patternset id="sources"> <include name="std/**/*.java"/> <include name="prof/**/*.java" i f ="professional"/> <exclude name="**/*test*"/> </patternset > Παράδειγµα 2: πηγές <patternset id="resources"> <includesfile name="jar-list.txt"/> <includesfile name="${properties-list}" i f ="properties-list"/> <patternset/> αίµων, Τεύχος 4 Περιγραφή Ant 36/37
Πηγές http://ant.apache.org http://ant.apache.org/manual/index.html αίµων, Τεύχος 4 Περιγραφή Ant 37/37