This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision Next revision Both sides next revision | ||
java:classpath [2015/09/19 05:01] gthanos [Χρήση jar classpath] |
java:classpath [2016/02/12 13:43] gthanos [Παράδειγμα μεταγλώττισης και εκτέλεσης] |
||
---|---|---|---|
Line 22: | Line 22: | ||
===== Παραδείγματα χρήσης CLASSPATH ===== | ===== Παραδείγματα χρήσης CLASSPATH ===== | ||
- | <WRAP tip 80% center round> | + | ===== Χρήση Classpath - Παράδειγμα 1ο ===== |
**Προσοχή:** __Η μεταβλητή CLASSPATH δείχνει κάθε φορά όχι που βρίσκονται τα τελικά αρχεία *.class για κάθε κλάση, αλλά που θα πρέπει να ψάξει ο compiler ή το JRE για αρχεία *.class.__ | **Προσοχή:** __Η μεταβλητή CLASSPATH δείχνει κάθε φορά όχι που βρίσκονται τα τελικά αρχεία *.class για κάθε κλάση, αλλά που θα πρέπει να ψάξει ο compiler ή το JRE για αρχεία *.class.__ | ||
Line 37: | Line 37: | ||
</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**. | + | , δηλαδή έχουμε |
+ | <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/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 83: | ||
<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 91: | ||
<code> | <code> | ||
- | javac MyTestClass.java -cp /home/username/Java/libraries/build/jar/shapes3d.jar | + | javac MyTestClass.java -cp /path/to/dir/classpath_usage_ex1/build/jar/my-library.jar |
</code> | </code> | ||
+ | |||
<WRAP tip 80% center round> | <WRAP tip 80% center round> | ||
Line 85: | Line 100: | ||
Υποθέτωντας ότι βρίσκεστε στον κατάλογο **/home/username/Java/test/** θα γράφατε. | Υποθέτωντας ότι βρίσκεστε στον κατάλογο **/home/username/Java/test/** θα γράφατε. | ||
<code> | <code> | ||
- | javac MyTestClass.java -cp ../libraries/build/jar/shapes3d.jar | + | javac MyTestClass.java -cp build/jar/my-library.jar |
</code> | </code> | ||
</WRAP> | </WRAP> | ||
- | ==== Χρήση πολλαπλών classpaths ==== | + | ===== Χρήση πολλαπλών classpaths ===== |
Εάν θέλετε να ορίσετε στο CLASSPATH πολλαπλά **jar** αρχεία ή directories, τότε μπορείτε να το κάνετε ακολουθώντας τους παραπάνω κανόνες και χωρίζοντας τις εγγραφές με τον χαρακτήρα **':'** στο Linux ή με τον χαρακτήρα **';'** στο λειτουργικό σύστημα Windows. | Εάν θέλετε να ορίσετε στο CLASSPATH πολλαπλά **jar** αρχεία ή directories, τότε μπορείτε να το κάνετε ακολουθώντας τους παραπάνω κανόνες και χωρίζοντας τις εγγραφές με τον χαρακτήρα **':'** στο Linux ή με τον χαρακτήρα **';'** στο λειτουργικό σύστημα Windows. | ||
Line 96: | 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 110: | 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 178: | 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 | Αρχεία JAR ]] | Επόμενο: [[ java:ant|Αυτόματη μεταγλώττιση με χρήση Apache Ant ]]| | ||
- | |Προηγούμενο: [[:java:packages:dir_structure | Δομή των αρχείων Java ]] | Επόμενο: [[ :java:jar_files | Αρχεία JAR ]]| | ||