This shows you the differences between two versions of the page.
Next revision | Previous revision Next revision Both sides next revision | ||
java:packages:dir_structure [2015/01/23 04:41] gthanos created |
java:packages:dir_structure [2016/02/12 13:06] gthanos |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== Δομή των αρχείων Java ====== | + | ====== Μεταγλώττιση κλάσεων που ανήκουν σε πακέτα ====== |
Μέχρι τώρα είδαμε ότι κάθε κλάση στη Java αποτελεί ένα ξεχωριστό αρχείο. Για παράδειγμα η κλάση ''myFirstClass'' θα βρίσκεται στο αρχείο με το όνομα ''myFirstClass.java''. Η εισαγωγή των πακέτων στην γλώσσα Java, εκτός από την ονοματοδοσία των αρχείων καθορίζει και τον κατάλογο (directory) μέσα στο οποίο θα πρέπει να βρίσκονται. | Μέχρι τώρα είδαμε ότι κάθε κλάση στη Java αποτελεί ένα ξεχωριστό αρχείο. Για παράδειγμα η κλάση ''myFirstClass'' θα βρίσκεται στο αρχείο με το όνομα ''myFirstClass.java''. Η εισαγωγή των πακέτων στην γλώσσα Java, εκτός από την ονοματοδοσία των αρχείων καθορίζει και τον κατάλογο (directory) μέσα στο οποίο θα πρέπει να βρίσκονται. | ||
- | Ως παράδειγμα, θα θεωρήσουμε ξανά την κλάση Test του homework1 του τρέχοντος μαθήματος (CE325). Με βάση τα παραπάνω διαμορφώνεται το πακέτο με όνομα ''gr.uth.inf.ce325.homework1'' μέσα στο οποίο βρίσκεται η κλάση ''Test''. | + | Ως παράδειγμα, θα θεωρήσουμε ξανά την κλάση Test του homework1 του τρέχοντος μαθήματος (CE210). Με βάση τα παραπάνω διαμορφώνεται το πακέτο με όνομα ''ce210.homework1'' μέσα στο οποίο βρίσκεται η κλάση ''Test''. Η ενδεικτική κλάση **Test** δίνεται παρακάτω |
- | Ας θεωρήσουμε επίσης ότι το homework1 είναι ένα ξεχωριστό project που βρίσκεται μέσα στον κατάλογο ''CE325/Homework1/'' (ο οποίος με την σειρά του βρίσκεται σε ένα τυχαίο μονοπάτι του filesystem). Ιδανικά θα θέλαμε να διαχωρίσουμε τα αρχεία πηγαίου κώδικα **.java** από τα εκτελέσιμα αρχεια **.class**. Για τον λόγο αυτό δημιουργούμε δύο υποκαταλόγους ''src'' και ''build''. Έτσι έχουμε τους καταλόγους | + | <code java Test.java> |
+ | package ce210.homework1; | ||
+ | public class Test { | ||
+ | String test; | ||
+ | public Test(String s) { test = s; } | ||
+ | public String toString() { return test; } | ||
+ | } | ||
+ | </code> | ||
+ | |||
+ | Ας θεωρήσουμε επίσης ότι όλα τα αρχεία της συγκεκριμένης εργασίας βρίσκονται μέσα στον κατάλογο ''project1/'', σε ένα τυχαίο μονοπάτι του filesystem. Ιδανικά θα θέλαμε να διαχωρίσουμε τα αρχεία πηγαίου κώδικα **.java** από τα εκτελέσιμα αρχεια **.class**. Για τον λόγο αυτό δημιουργούμε δύο υποκαταλόγους | ||
+ | - ''src'' για τον πηγαίο κώδικα και | ||
+ | - ''build'' για τα εκτελέσιμα αρχεία. | ||
+ | |||
+ | Τελικά, έχουμε τους καταλόγους | ||
+ | |||
+ | <code> | ||
+ | project1/src | ||
+ | project1/build | ||
+ | </code> | ||
+ | |||
+ | Προκειμένου να μεταγλωττίσουμε την κλάση ''ce210.homework1.Test'', αυτή θα πρέπει να βρίσκεται στον κατάλογο ''ce210/homework1/'' μέσα στον φάκελο ''src'', δηλαδή τελικά η κλάση **Test.java** θα βρίσκεται στον κατάλογο | ||
+ | |||
+ | <code> | ||
+ | project1/src/ce210/homework1/Test.java | ||
+ | </code> | ||
+ | |||
+ | Η παραπάνω κλάση μεταγλωττίζεται με μία δήλωση της μορφής | ||
<code> | <code> | ||
- | CE325/Homework1/src | + | cd project1/ |
- | CE325/Homework1/build | + | javac -d ./build/ src/ce210/homework1/Test.java |
</code> | </code> | ||
+ | <WRAP tip 80% center round> | ||
+ | To directive ''-d ./build/'' χρησιμοποιείται για να δηλώσουμε που θέλουμε να τοποθετήσουμε τελικά τα εκτελέσιμα αρχεία ''*.class''. Η τελική θέση του εκτελέσιμου **Test.class** είναι στον κατάλογο ''project1/build''. Επειδή το μεταγλωττισμένο αρχείο θα πρέπει να βρίσκεται εσωτερικά στον κατάλογο ''ce210/homework1/'' τελικά καταλήγουμε το πλήρες path του μεταγλωττισμένου αρχείου να είναι ''project1/build/ce210/homework1/Test.class''. O java compiler φτιάχνει την δομή καταλόγου των αρχείων **.class** __αυτόματα με βάση το πακέτο στο οποίο ανήκουν__. | ||
+ | </WRAP> | ||
+ | |Προηγούμενο: [[ :java:packages:using | Χρήση πακέτων ]] | Επόμενο: [[ :java:jar_files | Αρχεία Java Archive (JAR) ]] | |