java:classpath

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
java:classpath [2015/09/19 04:24]
gthanos [JAVA CLASSPATH]
java:classpath [2016/02/26 11:15] (current)
Line 1: Line 1:
-====== ​JAVA CLASSPATH ======+====== ​Η μεταβλητή περιβάλλοντος ​CLASSPATH ======
  
 Ως CLASSPATH ορίζεται το σύνολο των καταλόγων (directories) του συστήματος στα οποία βρίσκονται μεταγλωττισμένες κλάσεις (δηλ **.class** αρχεία) και οι οποίες είναι απαραίτητες για την μεταγλώττιση ή για τη εκτέλεση ενός προγράμματος Java. Με άλλα λόγια το CLASSPATH για κάθε Java πρόγραμμα δείχνει στο σύνολο των βιβλιοθηκών που απαιτούνται. Ως CLASSPATH ορίζεται το σύνολο των καταλόγων (directories) του συστήματος στα οποία βρίσκονται μεταγλωττισμένες κλάσεις (δηλ **.class** αρχεία) και οι οποίες είναι απαραίτητες για την μεταγλώττιση ή για τη εκτέλεση ενός προγράμματος Java. Με άλλα λόγια το CLASSPATH για κάθε Java πρόγραμμα δείχνει στο σύνολο των βιβλιοθηκών που απαιτούνται.
- 
-<WRAP important 80% center round> 
-**Προσοχή:​** Η μεταβλητή CLASSPATH δείχνει κάθε φορά όχι που βρίσκονται τα αρχεία *.class για κάθε κλάση, αλλά που θα πρέπει να ψάξει ο compiler ή το JRE για αρχεία *.class. Για παράδειγμα,​ αν έχετε τις κλάσεις 
-<​code>​ 
-my.package1.Class1 
-my.package2.Class2 
-</​code>​ 
- 
-που βρίσκονται στον κατάλογο **myProject/​src/​** δηλαδή 
-<​code>​ 
-myProject/​src/​package1/​Class1.java 
-myProject/​src/​package2/​Class2.java 
-</​code>​ 
- 
-οι οποίες είναι μεταγλωττισμένες μέσα στον κατάλογο **build/​classes/​** (δηλ. έχουμε τα αρχεία ​ 
-build/​classes/​my/​package1/​Class1** και **build/​classes/​my/​package2/​Class2**. 
-</​WRAP>​ 
  
 Όλα τα λειτουργικά συστήματα διαθέτουν την μεταβλητή [[java:​install|PATH]],​ όπου προσδιορίζονται οι κατάλογοι του συστήματος οι οποίοι περιέχουν εκτελέσιμα αρχεία συστήματος. Σε αναλογία με την μεταβλητή PATH, η μεταβλητή CLASSPATH προσδιορίζει του καταλόγους ή τα αρχεία τύπου **.jar** που είναι απαραίτητα για τη εκτέλεση ή την μεταγλώττιση ενός πρόγράμματος. Η μεταβλητή CLASSPATH αποτελεί μεταβλητή του συστήματος,​ την οποία τα εργαλεία της Java ελέγχουν για ύπαρξη πιθανών βιβλιοθηκών. ​ Όλα τα λειτουργικά συστήματα διαθέτουν την μεταβλητή [[java:​install|PATH]],​ όπου προσδιορίζονται οι κατάλογοι του συστήματος οι οποίοι περιέχουν εκτελέσιμα αρχεία συστήματος. Σε αναλογία με την μεταβλητή PATH, η μεταβλητή CLASSPATH προσδιορίζει του καταλόγους ή τα αρχεία τύπου **.jar** που είναι απαραίτητα για τη εκτέλεση ή την μεταγλώττιση ενός πρόγράμματος. Η μεταβλητή CLASSPATH αποτελεί μεταβλητή του συστήματος,​ την οποία τα εργαλεία της Java ελέγχουν για ύπαρξη πιθανών βιβλιοθηκών. ​
Line 25: Line 8:
  
 Στα πλαίσια του μαθήματος μας ΔΕΝ θα χρειαστεί να αλλάξετε μόνιμα την μεταβλητή CLASSPATH. Εάν επιθυμείτε αλλαγή της μεταβλητής CLASSPATΗ μπορείτε να το κάνετε με την βοήθεια των παρακάτω συνδέσμων. Στα πλαίσια του μαθήματος μας ΔΕΝ θα χρειαστεί να αλλάξετε μόνιμα την μεταβλητή CLASSPATH. Εάν επιθυμείτε αλλαγή της μεταβλητής CLASSPATΗ μπορείτε να το κάνετε με την βοήθεια των παρακάτω συνδέσμων.
-  * http://​docs.oracle.com/​javase/​8/​docs/​technotes/​tools/​windows/​classpath.hml+  * https://​docs.oracle.com/​javase/​8/​docs/​technotes/​tools/​windows/​classpath.html
   * http://​javarevisited.blogspot.gr/​2011/​01/​how-classpath-work-in-java.html   * http://​javarevisited.blogspot.gr/​2011/​01/​how-classpath-work-in-java.html
  
Line 39: Line 22:
 ===== Παραδείγματα χρήσης CLASSPATH ===== ===== Παραδείγματα χρήσης CLASSPATH =====
  
-Aς υποθέσουμε ότι θέλετε να μεταγλωττίσετε την ​κλάση ''​MyTestClass.java''​ η οποία απαιτεί την τις κλάσεις ''​gr.uth.inf.ce325.homework2.Rectangle''​ και ''​gr.uth.inf.ce325.homework2.Cylinder'',​ δηλαδή τις ​κλάσεις ''​Rectangle'' ​και ''​Cylinder'' ​που ανήκουν στο package ''​gr.uth.inf.ce325.homework2''​. Ας υποθέσουμε επίσης ότι στο λειτουργικό σύστημα Linux το path των παραπάνω μεταγλωττισμένων κλάσεων βρίσκεται στον παρακάτω κατάλογο+===== Χρήση Classpath - Παράδειγμα 1ο ===== 
 +**Προσοχή:​** __Η μεταβλητή CLASSPATH δείχνει κάθε φορά όχι ​που βρίσκονται τα τελικά ​αρχεία *.class για κάθε κλάση, ​αλλά ​που ​θα πρέπει να ψάξει ο compiler ή το JRE για αρχεία ​*.class.__ ​
  
 +Θα εξηγήσουμε αυτή την λεπτή διαφορά με ένα παράδειγμα. Ας υποθέσουμε ότι έχετε τις κλάσεις
 <​code>​ <​code>​
-/​home/​username/​CE325/​my_projects/​homework2/​build/​classes/​gr/​uth/​inf/​ce325/​homework2/​Rectange.class +my.package1.Class1 
-/​home/​username/​CE325/​my_projects/​homework2/​build/​classes/​gr/​uth/​inf/​ce325/​homework2/​Cylinder.class+my.package2.Class2
 </​code>​ </​code>​
  
-Επίσης,​ το πακέτο ''​gr.uth.inf.ce325.homework2''​ μετά την μεταγλώττιση όλων των κλάσεων που ανήκουν σε αυτό συμπιέζεται σε ένα **.jar** αρχείο ​που βρίσκεται στον κατάλογο+που βρίσκονται στον κατάλογο ​**myProject/​src/​** δηλαδή 
 +<​code>​ 
 +myProject/​src/​my/​package1/​Class1.java 
 +myProject/​src/​my/​package2/​Class2.java 
 +</​code>​
  
 +οι οποίες μεταγλωττίζονται μέσα στον κατάλογο **myProject/​build/​classes/​** με μία δήλωση της μορφής:​
 <​code>​ <​code>​
-/home/username/CE325/my_projects/homework2/build/jar/homework2.jar+cd path/to/dir/myProject 
 +javac -d build/​classes/​ src/​my/​package1/​Class1.java 
 +javac -d build/​classes/​ src/​my/​package1/​Class2.java 
 +</​code>​ 
 + 
 +, δηλαδή έχουμε 
 +<​code>​ 
 +myProject/​build/​classes/​my/​package1/​Class1.class 
 +myProject/​build/​classes/​my/​package2/​Class2.class 
 +</​code>​ 
 + 
 +Αν θέλετε να μεταγλωττίσετε ή να εκτελέσετε ένα πρόγραμμα το οποίο χρησιμοποιεί τις παραπάνω μεταγλωττισμένες κλάσεις θα πρέπει να δηλώσετε ως classpath τον κατάλογο **myProject/​build/​classes/​**.  
 + 
 +δηλαδή 
 +<​code>​ 
 +javac -cp path/​to/​dir/​myProject/​build/​classes/​ JavaClassToCompileAndRun.java 
 +</​code>​ 
 + 
 +Από εκεί και κάτω, εφόσον ο compiler γνωρίζει το πλήρες όνομα της κλάσης (<​package name> + <class name>) αναζητά στο αντίστοιχο path την κλάση που χρειάζεται κάθε φορά.  
 + 
 +Έτσι αν ο compiler ή το JRE χρειάζεται την κλάση **my.package1.Class1** τότε στο classpath που έχετε ορίσει θα ψάξει για την κλάση με συνολικό path **myProject/​build/​classes/​my/​package1/​Class1.class**. 
 + 
 +===== Χρήση Classpath - Παράδειγμα 2ο ===== 
 + 
 +Κατεβάστε το παράδειγμα {{:​java:​classpath_usage_ex2.tgz|}}. 
 + 
 +Aς υποθέσουμε ότι θέλετε να μεταγλωττίσετε την κλάση **MyTestClass.java** η οποία απαιτεί τις κλάσεις **my.library.Cone.java** και **my.library.Cylinder.java**,​ δηλαδή τις κλάσεις **Cone** και **Cylinder** που ανήκουν στο package **my.library**. Ας υποθέσουμε επίσης ότι στο λειτουργικό σύστημα Linux το path των παραπάνω __μεταγλωττισμένων__ κλάσεων βρίσκεται στον παρακάτω κατάλογο 
 + 
 +<​code>​ 
 +/​path/​to/​dir/​classpath_usage_ex1/​build/​classes/​my/​library/​Cone.class 
 +/​path/​to/​dir/​classpath_usage_ex1/​build/​classes/​my/​library/​Cylinder.class 
 +</​code>​ 
 + 
 +Επίσης,​ το πακέτο **my.library** μετά την μεταγλώττιση όλων των κλάσεων που ανήκουν σε αυτό συμπιέζεται στο αρχείο **my-library.jar** που βρίσκεται στον κατάλογο 
 + 
 +<​code>​ 
 +/path/to/dir/classpath_usage_ex1/build/jar/my-library.jar
 </​code>​ </​code>​
  
 ==== Χρήση dir classpath ==== ==== Χρήση dir classpath ====
  
-Εάν θέλετε να ορίσετε στο CLASSPATH ένα κατάλογο (directory path) που περιέχει κλάσεις που απαιτούνται κατά την μεταγλώττιση ή εκτέλεση του προγράμματος σας τότε ορίζετε στο CLASSPATH το path αυτό. ​Για να μεταγλωττίσετε την κλάση του παραπάνω παραδείγματος αρκεί να γράψετε.+Για να μεταγλωττίσετε την κλάση του παραπάνω παραδείγματος αρκεί να γράψετε.
  
 <​code>​ <​code>​
-javac MyTestClass.java -cp /home/username/CE325/my_projects/​homework2/​build/​classes/​+javac MyTestClass.java -cp /path/to/dir/classpath_usage_ex1/​build/​classes/​
 </​code>​ </​code>​
  
Line 65: Line 91:
  
 <​code>​ <​code>​
-javac MyTestClass.java -cp /home/username/CE325/my_projects/​homework2/build/jar/homework2.jar+javac MyTestClass.java -cp /path/to/dir/classpath_usage_ex1/build/jar/my-library.jar
 </​code>​ </​code>​
  
-(__προσέξτε ότι ορίζουμε το jar αρχείο και όχι τον κατάλογο στον οποίο περιέχεται__). 
  
-==== Χρήση πολλαπλών classpaths ====+<WRAP tip 80% center round> 
 +Παρατηρήστε ότι ορίζουμε το **jar** αρχείο και όχι τον κατάλογο στον οποίο περιέχεται. Στο παραπάνω παράδειγμα χρησιμοποιούμε απόλυτα paths για τον ορισμό του CLASSPATH. Φυσικά μπορείτε να χρησιμοποιείται και σχετικά paths, όπως παρακάτω 
 + 
 +Υποθέτωντας ότι βρίσκεστε στον κατάλογο **/​home/​username/​Java/​test/​** θα γράφατε. 
 +<​code>​ 
 +javac MyTestClass.java -cp build/​jar/​my-library.jar 
 +</​code>​ 
 +</​WRAP>​ 
 + 
 +===== Χρήση πολλαπλών classpaths ​=====
  
 Εάν θέλετε να ορίσετε στο CLASSPATH πολλαπλά **jar** αρχεία ή directories,​ τότε μπορείτε να το κάνετε ακολουθώντας τους παραπάνω κανόνες και χωρίζοντας τις εγγραφές με τον χαρακτήρα **':'​** στο Linux ή με τον χαρακτήρα **';'​** στο λειτουργικό σύστημα Windows. Εάν θέλετε να ορίσετε στο CLASSPATH πολλαπλά **jar** αρχεία ή directories,​ τότε μπορείτε να το κάνετε ακολουθώντας τους παραπάνω κανόνες και χωρίζοντας τις εγγραφές με τον χαρακτήρα **':'​** στο Linux ή με τον χαρακτήρα **';'​** στο λειτουργικό σύστημα Windows.
Line 77: Line 111:
  
 <​code>​ <​code>​
-/​home/​username/​CE325/​other_libs/​ntua-common-libs.jar+/​home/​username/​CE325/​other_libs/​ntua-common-libs.jar ​(Linux) ή 
 +C:​\Users\username\CE325\other_libs\ntua-common-libs.jar (Windows)
 </​code>​ </​code>​
  
Line 91: Line 126:
  
 <​code>​ <​code>​
-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
 </​code>​ </​code>​
  
Line 159: Line 194:
 </​code>​ </​code>​
  
-Εναλλακτικά χρησιμοποιήστε το αρχείο ''​build.xml''​ που επισυνάπτεται για να αυτοματοποιήσετε την παραπάνω διαδικασία με το πρόγραμμα [[http://​ant.apache.org/​|Ant]]. ​Για εγκατάσταση του Ant σε Linux εγκαταστήστε ​το αντίστοιχο πακέτο. Για την εγκατάσταση σε Windows κατεβάστε το πρόγραμμα [[https://​code.google.com/​p/​winant/​|WinAnt]].+Εναλλακτικά χρησιμοποιήστε το αρχείο ''​build.xml''​ που επισυνάπτεται για να αυτοματοποιήσετε την παραπάνω διαδικασία με το πρόγραμμα [[http://​ant.apache.org/​|Apache ​Ant]]. ​Περισσότερα για την μεταγλώττιση με την βοήθεια ​του ​Apache ​Ant μπορείτε να βρείτε στην ενότητα που ακολουθεί. 
 + 
 +|Προηγούμενο: [[:​java:​jar_files | Αρχεία Java Archive (JAR) ]] | [[:toc | Περιεχόμενα]] |Επόμενο: ​[[ java:ant|Αυτόματη μεταγλώττιση με χρήση Apache Ant   ]]|
  
-|Προηγούμενο:​ [[:​java:​packages:​dir_structure | Δομή των αρχείων Java ]] | Επόμενο:​ [[ :​java:​jar_files | Αρχεία JAR ]]| 
  
  
java/classpath.1442636686.txt.gz · Last modified: 2016/02/26 11:15 (external edit)