This shows you the differences between two versions of the page.
|
java:classpath [2015/02/24 12:56] gthanos [Παράδειγμα μεταγλώττισης και εκτέλεσης] |
java:classpath [2020/02/11 10:05] |
||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ====== JAVA CLASSPATH ====== | ||
| - | |||
| - | Ως CLASSPATH ορίζεται το σύνολο των καταλόγων (directories) του συστήματος στα οποία βρίσκονται μεταγλωττισμένες κλάσεις (δηλ **.class** αρχεία) και οι οποίες είναι απαραίτητες για την μεταγλώττιση ή για τη εκτέλεση ενός προγράμματος Java. Με άλλα λόγια το CLASSPATH δείχνει το σύνολο των βιβλιοθηκών που απαιτούνται από ένα πρόγραμμα Java. | ||
| - | |||
| - | Όλα τα λειτουργικά συστήματα διαθέτουν την μεταβλητή [[java: | ||
| - | |||
| - | ===== Αλλάζοντας μόνιμα την μεταβλητή CLASSPATH ===== | ||
| - | |||
| - | Στα πλαίσια του μαθήματος μας ΔΕΝ θα χρειαστεί να αλλάξετε μόνιμα την μεταβλητή CLASSPATH. Εάν επιθυμείτε αλλαγή της μεταβλητής CLASSPATΗ μπορείτε να το κάνετε με την βοήθεια των παρακάτω συνδέσμων. | ||
| - | * http:// | ||
| - | * http:// | ||
| - | |||
| - | ===== Αλλάζοντας προσωρινά την μεταβλητή CLASSPATH ===== | ||
| - | |||
| - | Στις περισσότερες περιπτώσεις αυτό που θα σας ζητηθεί είναι ο προσωρινός ορισμός του περιεχομένου της μεταβλητής CLASSPATH για τις ανάγκες ενός προγράμματος. Για να μεταγλωττίσετε ή για να τρέξετε το πρόγραμμα σας συχνά θα χρειαστείτε άλλες κλάσεις τις οποίες έχετε μεταγλωττίσει ή βιβλιοθήκες τρίτων τις οποίες χρησιμοποιείτε στα προγράμματα σας. Για να ορίσετε επομένως τα PATHs των κλάσεων ή των βιβλιθηκών αυτών θα χρειαστεί να προσδιορίσετε τις κλάσεις ή τις βιβλιοθήκες αυτές. Αυτό το κάνετε κατά την μεταγλώττιση ή κατά την εκτέλεση ενός προγράμματος μέσω του flag **-classpath** ή **-cp**. | ||
| - | |||
| - | <WRAP center tip round 70%> | ||
| - | Όταν ορίζετε την μεταβλητή CLASSPATH μέσω της επιλογής (flag) **-classpath** ή **-cp** κάνετε **overwrite** την μεταβλητή περιβάλλοντος CLASSPATH που πιθανόν έχετε ορίσει προηγούμενα. | ||
| - | </ | ||
| - | |||
| - | |||
| - | ===== Παραδείγματα χρήσης CLASSPATH ===== | ||
| - | |||
| - | Aς υποθέσουμε ότι θέλετε να μεταγλωττίσετε την κλάση '' | ||
| - | |||
| - | < | ||
| - | / | ||
| - | / | ||
| - | </ | ||
| - | |||
| - | Επίσης, | ||
| - | |||
| - | < | ||
| - | / | ||
| - | </ | ||
| - | |||
| - | ==== Χρήση dir classpath ==== | ||
| - | |||
| - | Εάν θέλετε να ορίσετε στο CLASSPATH ένα κατάλογο (directory path) που περιέχει κλάσεις που απαιτούνται κατά την μεταγλώττιση ή εκτέλεση του προγράμματος σας τότε ορίζετε στο CLASSPATH το path αυτό. Για να μεταγλωττίσετε την κλάση του παραπάνω παραδείγματος αρκεί να γράψετε. | ||
| - | |||
| - | < | ||
| - | javac MyTestClass.java -cp / | ||
| - | </ | ||
| - | |||
| - | ==== Χρήση jar classpath ==== | ||
| - | |||
| - | Εάν θέλετε να ορίσετε στο CLASSPATH ένα **jar** αρχείο που περιέχει κλάσεις που απαιτούνται κατά την μεταγλώττιση ή την εκτέλεση του προγράμματος σας τότε ορίζετε στο CLASSPATH το **jar** αρχείο. Για να μεταγλωττίσετε την κλάση του παραπάνω παραδείγματος αρκεί να γράψετε. | ||
| - | |||
| - | < | ||
| - | javac MyTestClass.java -cp / | ||
| - | </ | ||
| - | |||
| - | (__προσέξτε ότι ορίζουμε το jar αρχείο και όχι τον κατάλογο στον οποίο περιέχεται__). | ||
| - | |||
| - | ==== Χρήση πολλαπλών classpaths ==== | ||
| - | |||
| - | Εάν θέλετε να ορίσετε στο CLASSPATH πολλαπλά **jar** αρχεία ή directories, | ||
| - | |||
| - | Αν για παράδειγμα, | ||
| - | |||
| - | < | ||
| - | / | ||
| - | </ | ||
| - | |||
| - | τότε για την μεταγλώττιση θα πρέπει να γράψετε | ||
| - | |||
| - | **για Linux** | ||
| - | |||
| - | < | ||
| - | javac MyTestClass.java -cp / | ||
| - | </ | ||
| - | |||
| - | **για Windows** | ||
| - | |||
| - | < | ||
| - | javac MyTestClass.java -cp / | ||
| - | </ | ||
| - | |||
| - | <WRAP tip round> | ||
| - | Αν δεν έχετε ορίσει την μεταβλητή περιβάλλοντος CLASSPATH και παράλληλα δεν έχετε ορίσει το CLASSPATH μέσω της επιλογής **-cp** ή **--classpath** τότε η default τιμή είναι το τρέχον directory. Εάν ορίσετε μία ή περισσότερες τιμές μέσω της επιλογής **-cp** ή **--classpath**, | ||
| - | |||
| - | < | ||
| - | javac MyTestClass.java -cp / | ||
| - | </ | ||
| - | </ | ||
| - | |||
| - | ===== Μεταγλώττιση κλάσεων με χρήση της επιλογής --sourcepath | ||
| - | |||
| - | Συχνά θέλετε να μεταγλωττίσετε κώδικα που έχετε φτιάξει και αποτελείται από ένα σύνολο κλάσεων οι οποίες αλληλοεξαρτώνται μεταξύ τους. Σε αυτή την περίπτωση η επιλογή --classpath δεν έχει ιδιαίτερο νόημα, καθώς αρχικά δεν υπάρχουν μεταγλωττισμένες κλάσεις που μπορείτε να χρησιμοποιήσετε. Ο java compiler μπορεί να λάβει υπόψη του εκτός από μεταγλωττισμένες κλάσεις και αρχεία πηγαίου κώδικα προς μεταγλώττιση. Έτσι εάν μία κλάση την οποία χρειάζεστε δεν είναι μεταγλωττισμένη μπορείτε να το κάνετε δείχνοντας στα αρχεία πηγαίου κώδικα και όχι στα μεταγλωττισμένα αρχεία. | ||
| - | |||
| - | Σε αυτή την περίπτωση καλείστε να κάνετε χρήση της επιλογής **--sourcepath**, | ||
| - | |||
| - | < | ||
| - | gr/ | ||
| - | </ | ||
| - | |||
| - | που ανήκει στο package '' | ||
| - | |||
| - | < | ||
| - | / | ||
| - | </ | ||
| - | |||
| - | απαιτεί για την μεταγλώττιση του την κλάση < | ||
| - | |||
| - | < | ||
| - | cd / | ||
| - | javac gr/ | ||
| - | </ | ||
| - | |||
| - | Μέσω της επιλογής **--sourcepath** ο μεταγλωττιστής έχει πρόσβαση στο αρχείο πηγαίου κώδικα Circle.java που βρίσκεται στον κατάλογο | ||
| - | |||
| - | < | ||
| - | / | ||
| - | </ | ||
| - | |||
| - | ===== Παράδειγμα μεταγλώττισης και εκτέλεσης ===== | ||
| - | |||
| - | Δείτε το παρακάτω παράδειγμα μεταγλώττισης και εκτέλεσης του παρακάτω κώδικα {{: | ||
| - | |||
| - | Μεταγλώττιση επιμέρους αρχείων | ||
| - | < | ||
| - | cd src | ||
| - | javac gr\uth\inf\_2d_shapes\Point.java -d ..\build\classes\ | ||
| - | javac gr\uth\inf\_2d_shapes\Rectangle.java -sourcepath . -d ..\build\classes\ | ||
| - | javac gr\uth\inf\_3d_shapes\Cuboid.java -sourcepath . -d ..\build\classes\ | ||
| - | cd .. | ||
| - | javac ClasspathDemo.java -sourcepath src\ | ||
| - | </ | ||
| - | |||
| - | Δημιουργία jar αρχείου | ||
| - | < | ||
| - | cd build\jar | ||
| - | jar cvf shapes.jar -C ..\classes\ . | ||
| - | </ | ||
| - | |||
| - | Εκτέλεση | ||
| - | < | ||
| - | cd ..\.. // στον κατάλογο lec10-packages-classpath-demo | ||
| - | java -cp build\classes; | ||
| - | ή με χρήση του jar αρχείου | ||
| - | java -cp build\jar\shapes.jar; | ||
| - | </ | ||
| - | |||
| - | |Προηγούμενο: | ||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||