====== Αυτόματη μεταγλώττιση με χρήση Apache Ant ====== Το [[http://ant.apache.org/|Apache Ant]] είναι ένα εργαλείο δημιουργίας διεργασιών αλληλεξαρτούμενων μεταξύ τους με στόχο την μεταγλώττιση σύνθετων προγραμμάτων. Η λογική λειτουργίας του είναι αντίστοιχη του [[https://www.gnu.org/software/make/|GΝU Make]] και άλλων ανάλογων προγραμμάτων, περιέχει όμως χαρακτηριστικά που διευκολύνουν την διαδικασία μεταγλώττισης αρχείων JAVA. Βασικά χαρακτηριστικά του [[http://ant.apache.org/|Apache Ant]] είναι ότι εξής: - Τα configuration/build αρχεία έχουν format [[http://www.w3schools.com/xml|XML]]. - Το configuration αρχείο έχει όνομα **build.xml**. - Κάθε αρχείο περιέχει έναν η περισσότερους στόχους. Οι στόχοι είναι αλληλεξαρτούμενοι δηλαδή αν έχετε τους στόχους **Α**, **B**, **C**, **D** μπορείτε να δημιουργήσετε σχέσεις εξάρτησης μεταξύ τους ως παρακάτω (το παράδειγμα είναι ενδεικτικό): - **B** [depends ->] **A** - **C** [depends ->] **A** - **D** [depends ->] **B,C** To παραπάνω θα μπορούσε να αποτυπωθεί στον παρακάτω κώδικα Κάθε στόχος (//target//) συνήθως είναι μία από τις παρακάτω ενέργειες: * διαγραφή/καθαρισμός μεταγλωττισμένων αρχείων και καταλόγων. * δημιουργία αρχείων/καταλόγων. * μεταγλώττιση ενός ή περισσότερων αρχείων. * δημιουργία **jar** αρχείου. ===== Διάρθρωση καταλόγων αρχείων *.java και εκτελέσιμων αρχείων *.class ===== Όπως ήδη αναφέρθηκε, μια καλή πρακτική ανάπτυξης κώδικα JAVA είναι να διαχωρίζουμε τα αρχεία πηγαίου κώδικα ***.java** σε σχέση με τα μεταγλωττισμένα αρχεία ***.class**. Για τον σκοπό αυτό σε κάθε project, δημιουργούμε δύο φακέλους, **src** που περιέχει αρχεία πηγαίου κώδικα και **build** που περιέχει μεταγλωττισμένα αρχεία. Ο κατάλογος **build** μπορεί να διακριθεί στους υποκαταλόγους **build/classes** (περιέχει τα αρχεία ***.class**) και **build/jar** (περιέχει τα αρχεία JAR, εφόσον υπάρχουν). Συνολικά η προτεινόμενη δομή καταλόγων είναι η εξής: * **src** --> πηγαίoς κώδικας * **build/classes** --> αρχεία *.class * **build/jar** --> αρχεία *.jar ===== Παράδειγμα Ant Script ===== Με βάση την παραπάνω δομή ένα αρκετά αντιπροσωπευτικό παράδειγμα ant script είναι το παρακάτω: Για το παραπάνω //script// διακρίνουμε τα εξής //targets//: * **clean:** διαγράφει τον κατάλογο **build** μαζί με σύνολο των περιεχομένων του. Στη συνέχεια δημιουργεί την ιεραρχία καταλόγων **build/classes** και **build/jar**. * **build:** μεταγλωττίζει τα αρχεία ***.java** * **jar:** δημιουργεί αρχείο ce210library.jar προσθέτοντας όλα τα αρχεία που βρίσκονται στον κατάλογο **build/classes/ce210/**, αλλά όχι στον κατάλογο **build/classes/ce210/temp**. Προκειμένου να χρησιμοποιήσετε το παραπάνω script μπορείτε να γράψετε: ant clean; //clean everything ant jar; //compile and create jar file ===== Εγκατάσταση Apache Ant ===== ==== Linux ==== Εγκατάσταση του πακέτου **ant** από τον package manager (για εκδόσεις ubuntu/kubuntu ή suse). ==== Windows ==== Εγκατάσταση της εφαρμογής [[https://code.google.com/p/winant/|winant]]. |Προηγούμενο: [[ :java:classpath | Η μεταβλητή περιβάλλοντος CLASSPATH ]] | [[ :toc | Περιεχόμενα ]] | Επόμενο: [[ :java:interfaces | Διεπαφές (Interfaces) ]] |