User Tools

Site Tools


java:classpath

Differences

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

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
java:classpath [2015/09/19 04:56] – [Χρήση dir classpath] gthanosjava:classpath [2020/02/11 10:05] (current) – external edit 127.0.0.1
Line 1: Line 1:
-====== JAVA CLASSPATH ======+====== Η μεταβλητή περιβάλλοντος CLASSPATH ====== 
 + 
 +<WRAP important 60% center round> 
 +===Η συγκεκριμένη ενότητα είναι προαιρετική και μπορείτε να την παραλήψετε κατά την ανάγνωση της θεωρείας του μαθήματος.=== 
 +</WRAP>
  
 Ως CLASSPATH ορίζεται το σύνολο των καταλόγων (directories) του συστήματος στα οποία βρίσκονται μεταγλωττισμένες κλάσεις (δηλ **.class** αρχεία) και οι οποίες είναι απαραίτητες για την μεταγλώττιση ή για τη εκτέλεση ενός προγράμματος Java. Με άλλα λόγια το CLASSPATH για κάθε Java πρόγραμμα δείχνει στο σύνολο των βιβλιοθηκών που απαιτούνται. Ως CLASSPATH ορίζεται το σύνολο των καταλόγων (directories) του συστήματος στα οποία βρίσκονται μεταγλωττισμένες κλάσεις (δηλ **.class** αρχεία) και οι οποίες είναι απαραίτητες για την μεταγλώττιση ή για τη εκτέλεση ενός προγράμματος Java. Με άλλα λόγια το CLASSPATH για κάθε Java πρόγραμμα δείχνει στο σύνολο των βιβλιοθηκών που απαιτούνται.
Line 8: Line 12:
  
 Στα πλαίσια του μαθήματος μας ΔΕΝ θα χρειαστεί να αλλάξετε μόνιμα την μεταβλητή 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 22: Line 26:
 ===== Παραδείγματα χρήσης CLASSPATH ===== ===== Παραδείγματα χρήσης CLASSPATH =====
  
-<WRAP tip 80% center round>+===== Χρήση Classpath - Παράδειγμα 1ο =====
 **Προσοχή:** __Η μεταβλητή CLASSPATH δείχνει κάθε φορά όχι που βρίσκονται τα τελικά αρχεία *.class για κάθε κλάση, αλλά που θα πρέπει να ψάξει ο compiler ή το JRE για αρχεία *.class.__  **Προσοχή:** __Η μεταβλητή CLASSPATH δείχνει κάθε φορά όχι που βρίσκονται τα τελικά αρχεία *.class για κάθε κλάση, αλλά που θα πρέπει να ψάξει ο compiler ή το JRE για αρχεία *.class.__ 
  
Line 37: Line 41:
 </code> </code>
  
-οι οποίες είναι μεταγλωττισμένες μέσα στον κατάλογο **myProject/build/**, δηλαδή+οι οποίες μεταγλωττίζονται μέσα στον κατάλογο **myProject/build/classes/** με μία δήλωση της μορφής:
 <code> <code>
-myProject/build/my/package1/Class1.class +cd path/to/dir/myProject 
-myProject/build/my/package2/Class2.class+javac -d build/classes/ src/my/package1/Class1.java 
 +javac -d build/classes/ src/my/package1/Class2.java
 </code> </code>
  
-Αν θέλετε να μεταγλωττίσετε ή να εκτελέσετε ένα πρόγραμμα το οποίο χρησιμοποιεί τις παραπάνω μεταγλωττισμένες κλάσεις θα πρέπει να δηλώσετε ως classpath τον κατάλογο **myProject/build**. +Μετά την μεταγλώττιση λαμβάνουμε τα αρχεία **.class**: 
 +<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 γνωρίζει το πλήρες όνομα της κλάσης (<package name> + <class name>) αναζητά στο αντίστοιχο path την κλάση που χρειάζεται κάθε φορά. 
  
-Έτσι αν ο compiler ή το JRE χρειάζεται την κλάση **my.package1.Class1** τότε στο classpath που έχετε ορίσει θα ψάξει για την κλάση με συνολικό path **my/package1/Class1.class**. +Έτσι αν ο compiler ή το JRE χρειάζεται την κλάση **my.package1.Class1** τότε στο classpath που έχετε ορίσει θα ψάξει για την κλάση με συνολικό path **myProject/build/classes/my/package1/Class1.class**.
-</WRAP>+
  
-Aς υποθέσουμε ότι θέλετε να μεταγλωττίσετε την κλάση **MyTestClass.java** η οποία απαιτεί τις κλάσεις **my.library.Cone** και **my.library.Cylinder**, δηλαδή τις κλάσεις **Cone** και **Cylinder** που ανήκουν στο package **my.library**. Ας υποθέσουμε επίσης ότι στο λειτουργικό σύστημα Linux το path των παραπάνω __μεταγλωττισμένων__ κλάσεων βρίσκεται στον παρακάτω κατάλογο+===== Χρήση 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> <code>
-/home/username/Java/libraries/build/my/library/Cone.class +/path/to/dir/classpath_usage_ex1/build/classes/my/library/Cone.class 
-/home/username/Java/libraries/build/my/library/Cylinder.class+/path/to/dir/classpath_usage_ex1/build/classes/my/library/Cylinder.class
 </code> </code>
  
-Επίσης, το πακέτο **my.library** μετά την μεταγλώττιση όλων των κλάσεων που ανήκουν σε αυτό συμπιέζεται στο αρχείο **shapes3d.jar** που βρίσκεται στον κατάλογο+Επίσης, το πακέτο **my.library** μετά την μεταγλώττιση όλων των κλάσεων που ανήκουν σε αυτό συμπιέζεται στο αρχείο **my-library.jar** που βρίσκεται στον κατάλογο
  
 <code> <code>
-/home/username/Java/libraries/build/jar/shapes3d.jar+/path/to/dir/classpath_usage_ex1/build/jar/my-library.jar
 </code> </code>
- 
  
 ==== Χρήση dir classpath ==== ==== Χρήση dir classpath ====
Line 69: Line 87:
  
 <code> <code>
-javac MyTestClass.java -cp /home/username/Java/libraries/build/+javac MyTestClass.java -cp /path/to/dir/classpath_usage_ex1/build/classes/
 </code> </code>
  
Line 77: Line 95:
  
 <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.
  
-Αν για παράδειγμα, στο παραπάνω παράδειγμα εκτός από τις παραπάνω δύο κλάσεις χρειάζεστε και την κλάση ''gr.ntua.ece.java.common-libs.SinglyNodeList'' που βρίσκεται στο dir+Αν για παράδειγμα, στο παραπάνω παράδειγμα εκτός από τις παραπάνω δύο κλάσεις ''Cone'' και ''Cylinder'' χρειάζεστε και την κλάση ''gr.ntua.ece.java.common-libs.SinglyNodeList'' που βρίσκεται στο jar αρχείο
  
 <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 103: Line 130:
  
 <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 171: Line 198:
 </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.1442638566.txt.gz · Last modified: 2015/09/19 03:56 (external edit)