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 πρόγραμμα δείχνει στο σύνολο των βιβλιοθηκών που απαιτούνται. | ||
- | < | + | Όλα τα λειτουργικά συστήματα διαθέτουν την μεταβλητή [[java: |
- | **Προσοχή: | + | |
+ | ===== Αλλάζοντας μόνιμα την μεταβλητή CLASSPATH ===== | ||
+ | |||
+ | Στα πλαίσια του μαθήματος μας ΔΕΝ θα χρειαστεί να αλλάξετε μόνιμα την μεταβλητή CLASSPATH. Εάν επιθυμείτε αλλαγή της μεταβλητής CLASSPATΗ μπορείτε να το κάνετε με την βοήθεια των παρακάτω συνδέσμων. | ||
+ | * https:// | ||
+ | * http:// | ||
+ | |||
+ | ===== Αλλάζοντας προσωρινά την μεταβλητή CLASSPATH ===== | ||
+ | |||
+ | Στις περισσότερες περιπτώσεις αυτό που θα σας ζητηθεί είναι ο προσωρινός ορισμός του περιεχομένου της μεταβλητής CLASSPATH για τις ανάγκες ενός προγράμματος. Για να μεταγλωττίσετε ή για να τρέξετε το πρόγραμμα σας συχνά θα χρειαστείτε άλλες κλάσεις τις οποίες έχετε μεταγλωττίσει ή βιβλιοθήκες τρίτων τις οποίες χρησιμοποιείτε στα προγράμματα σας. Για να ορίσετε επομένως τα PATHs των κλάσεων ή των βιβλιθηκών αυτών θα χρειαστεί να προσδιορίσετε τις κλάσεις ή τις βιβλιοθήκες αυτές. Αυτό το κάνετε κατά την μεταγλώττιση ή κατά την εκτέλεση ενός προγράμματος μέσω του flag **-classpath** ή **-cp**. | ||
+ | |||
+ | <WRAP center | ||
+ | Όταν ορίζετε την μεταβλητή 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.1442637124.txt.gz · Last modified: 2015/09/19 03:32 (external edit)