java:classpath
Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| java:classpath [2015/09/19 04:32] – [JAVA CLASSPATH] gthanos | java:classpath [2020/02/11 10:05] (current) – external edit 127.0.0.1 | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ====== | + | ====== |
| + | |||
| + | <WRAP important 60% center round> | ||
| + | ===Η συγκεκριμένη ενότητα είναι προαιρετική και μπορείτε να την παραλήψετε κατά την ανάγνωση της θεωρείας του μαθήματος.=== | ||
| + | </ | ||
| Ως CLASSPATH ορίζεται το σύνολο των καταλόγων (directories) του συστήματος στα οποία βρίσκονται μεταγλωττισμένες κλάσεις (δηλ **.class** αρχεία) και οι οποίες είναι απαραίτητες για την μεταγλώττιση ή για τη εκτέλεση ενός προγράμματος Java. Με άλλα λόγια το CLASSPATH για κάθε Java πρόγραμμα δείχνει στο σύνολο των βιβλιοθηκών που απαιτούνται. | Ως CLASSPATH ορίζεται το σύνολο των καταλόγων (directories) του συστήματος στα οποία βρίσκονται μεταγλωττισμένες κλάσεις (δηλ **.class** αρχεία) και οι οποίες είναι απαραίτητες για την μεταγλώττιση ή για τη εκτέλεση ενός προγράμματος Java. Με άλλα λόγια το CLASSPATH για κάθε Java πρόγραμμα δείχνει στο σύνολο των βιβλιοθηκών που απαιτούνται. | ||
| - | <WRAP tip 70% center round> | + | Όλα τα λειτουργικά συστήματα διαθέτουν την μεταβλητή [[java: |
| - | **Προσοχή: | + | |
| + | ===== Αλλάζοντας μόνιμα την μεταβλητή CLASSPATH ===== | ||
| + | |||
| + | Στα πλαίσια του μαθήματος μας ΔΕΝ θα χρειαστεί να αλλάξετε μόνιμα την μεταβλητή CLASSPATH. Εάν επιθυμείτε αλλαγή της μεταβλητής CLASSPATΗ μπορείτε να το κάνετε με την βοήθεια των παρακάτω συνδέσμων. | ||
| + | * https:// | ||
| + | * http:// | ||
| + | |||
| + | ===== Αλλάζοντας προσωρινά την μεταβλητή CLASSPATH ===== | ||
| + | |||
| + | Στις περισσότερες περιπτώσεις αυτό που θα σας ζητηθεί είναι ο προσωρινός ορισμός του περιεχομένου της μεταβλητής CLASSPATH για τις ανάγκες ενός προγράμματος. Για να μεταγλωττίσετε ή για να τρέξετε το πρόγραμμα σας συχνά θα χρειαστείτε άλλες κλάσεις τις οποίες έχετε μεταγλωττίσει ή βιβλιοθήκες τρίτων τις οποίες χρησιμοποιείτε στα προγράμματα σας. Για να ορίσετε επομένως τα PATHs των κλάσεων ή των βιβλιθηκών αυτών θα χρειαστεί να προσδιορίσετε τις κλάσεις ή τις βιβλιοθήκες αυτές. Αυτό το κάνετε κατά την μεταγλώττιση ή κατά την εκτέλεση ενός προγράμματος μέσω του flag **-classpath** ή **-cp**. | ||
| + | |||
| + | < | ||
| + | Όταν ορίζετε την μεταβλητή CLASSPATH μέσω της επιλογής (flag) **-classpath** ή **-cp** κάνετε **overwrite** την μεταβλητή περιβάλλοντος CLASSPATH που πιθανόν έχετε ορίσει προηγούμενα. | ||
| + | </ | ||
| + | |||
| + | |||
| + | ===== Παραδείγματα χρήσης CLASSPATH ===== | ||
| + | |||
| + | ===== Χρήση Classpath - Παράδειγμα 1ο ===== | ||
| + | **Προσοχή: | ||
| + | |||
| + | Θα εξηγήσουμε αυτή την λεπτή διαφορά με ένα παράδειγμα. Ας υποθέσουμε ότι | ||
| < | < | ||
| my.package1.Class1 | my.package1.Class1 | ||
| Line 16: | Line 41: | ||
| </ | </ | ||
| - | οι οποίες | + | οι οποίες μεταγλωττίζονται μέσα στον κατάλογο **myProject/build/classes/** με μία δήλωση της μορφής: |
| < | < | ||
| - | myProject/ | + | cd path/to/ |
| - | myProject/build/my/package2/Class2.class | + | javac -d build/classes/ src/ |
| + | javac -d build/classes/ src/my/package1/Class2.java | ||
| </ | </ | ||
| - | τότε αν θέλετε να μεταγλωττίσετε ή να εκτελέσετε ένα πρόγραμμα το οποίο χρησιμοποιεί τις παραπάνω μεταγλωττισμένες κλάσεις θα πρέπει να δηλώσετε ως classpath τον κατάλογο | + | Μετά την μεταγλώττιση λαμβάνουμε τα αρχεία **.class**: |
| + | < | ||
| + | myProject/ | ||
| + | myProject/ | ||
| + | </ | ||
| - | Από εκεί και κάτω, εφόσον ο compiler γνωρίζει το πλήρες όνομα της κλάσης (< | + | Αν θέλετε να μεταγλωττίσετε ή να εκτελέσετε ένα |
| - | Έτσι αν ο compiler ή το JRE χρειάζεται την κλάση my.package1.Class1 τότε στο classpath που έχετε ορίσει θα ψάξει για την κλάση με συνολικό | + | δηλαδή |
| - | </WRAP> | + | < |
| + | javac -cp path/to/dir/ | ||
| + | </code> | ||
| - | Όλα τα λειτουργικά συστήματα διαθέτουν την μεταβλητή [[java: | + | Από |
| - | ===== Αλλάζοντας μόνιμα την | + | Έτσι αν ο compiler ή το JRE χρειάζεται την |
| - | Στα πλαίσια του μαθήματος μας ΔΕΝ θα χρειαστεί να αλλάξετε μόνιμα την μεταβλητή CLASSPATH. Εάν επιθυμείτε αλλαγή της | + | ===== Χρήση |
| - | * http:// | + | |
| - | * http:// | + | |
| - | ===== Αλλάζοντας προσωρινά | + | Κατεβάστε το παράδειγμα |
| - | + | ||
| - | Στις περισσότερες περιπτώσεις αυτό που θα σας ζητηθεί είναι ο προσωρινός ορισμός του περιεχομένου της μεταβλητής CLASSPATH για τις ανάγκες ενός προγράμματος. Για να μεταγλωττίσετε ή για να τρέξετε το πρόγραμμα σας συχνά θα χρειαστείτε | + | |
| - | + | ||
| - | <WRAP center tip round 70%> | + | |
| - | Όταν ορίζετε την μεταβλητή CLASSPATH μέσω της επιλογής (flag) **-classpath** ή **-cp** κάνετε **overwrite** την μεταβλητή περιβάλλοντος CLASSPATH που πιθανόν έχετε ορίσει προηγούμενα. | + | |
| - | </ | + | |
| - | + | Aς υποθέσουμε ότι θέλετε να μεταγλωττίσετε την κλάση | |
| - | ===== Παραδείγματα χρήσης CLASSPATH ===== | + | |
| - | + | ||
| - | Aς υποθέσουμε ότι θέλετε να μεταγλωττίσετε την κλάση | + | |
| < | < | ||
| - | /home/username/CE325/my_projects/ | + | /path/to/dir/classpath_usage_ex1/ |
| - | /home/username/CE325/my_projects/ | + | /path/to/dir/classpath_usage_ex1/ |
| </ | </ | ||
| - | Επίσης, | + | Επίσης, |
| < | < | ||
| - | /home/username/CE325/my_projects/ | + | /path/to/dir/classpath_usage_ex1/build/jar/my-library.jar |
| </ | </ | ||
| ==== Χρήση dir classpath ==== | ==== Χρήση dir classpath ==== | ||
| - | Εάν θέλετε να ορίσετε στο CLASSPATH ένα κατάλογο (directory path) που περιέχει κλάσεις που απαιτούνται κατά την μεταγλώττιση ή εκτέλεση του προγράμματος σας τότε ορίζετε στο CLASSPATH το path αυτό. | + | Για να μεταγλωττίσετε την κλάση του παραπάνω παραδείγματος αρκεί να γράψετε. |
| < | < | ||
| - | javac MyTestClass.java -cp /home/username/CE325/my_projects/ | + | javac MyTestClass.java -cp /path/to/dir/classpath_usage_ex1/ |
| </ | </ | ||
| Line 74: | Line 95: | ||
| < | < | ||
| - | javac MyTestClass.java -cp /home/username/CE325/my_projects/ | + | javac MyTestClass.java -cp /path/to/dir/classpath_usage_ex1/build/jar/my-library.jar |
| </ | </ | ||
| - | (__προσέξτε ότι ορίζουμε το jar αρχείο και όχι τον κατάλογο στον οποίο περιέχεται__). | ||
| - | ==== Χρήση πολλαπλών classpaths ==== | + | <WRAP tip 80% center round> |
| + | Παρατηρήστε ότι ορίζουμε το **jar** αρχείο και όχι τον κατάλογο στον οποίο περιέχεται αυτό. Στο παραπάνω παράδειγμα χρησιμοποιούμε απόλυτα paths για τον ορισμό του CLASSPATH. Φυσικά μπορείτε να χρησιμοποιείται και σχετικά paths, όπως παρακάτω | ||
| + | |||
| + | Υποθέτωντας ότι βρίσκεστε στον κατάλογο **/ | ||
| + | < | ||
| + | javac MyTestClass.java -cp build/ | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | ===== Χρήση πολλαπλών classpaths | ||
| Εάν θέλετε να ορίσετε στο CLASSPATH πολλαπλά **jar** αρχεία ή directories, | Εάν θέλετε να ορίσετε στο CLASSPATH πολλαπλά **jar** αρχεία ή directories, | ||
| - | Αν για παράδειγμα, | + | Αν για παράδειγμα, |
| < | < | ||
| - | / | + | / |
| + | C: | ||
| </ | </ | ||
| Line 100: | Line 130: | ||
| < | < | ||
| - | javac MyTestClass.java -cp /home/username/CE325/my_projects/homework2/build/classes;/home/username/CE325/other_libs/ntua-common-libs.jar | + | javac MyTestClass.java -cp C:\Users\username\CE325\my_projects\homework2\build\classes;C:\Users\username\CE325\other_libs\ntua-common-libs.jar |
| </ | </ | ||
| Line 168: | Line 198: | ||
| </ | </ | ||
| - | Εναλλακτικά χρησιμοποιήστε το αρχείο '' | + | Εναλλακτικά χρησιμοποιήστε το αρχείο '' |
| + | |||
| + | |Προηγούμενο: [[: | ||
| - | |Προηγούμενο: | ||
java/classpath.1442637157.txt.gz · Last modified: 2015/09/19 03:32 (external edit)
