====== Αυτόματη μεταγλώττιση με χρήση 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) ]] |