Μπορείτε εύκολα να συσκευάσετε ολόκληρο το σύνολο των τάξεων και των πόρων μιας εφαρμογής σε ένα αρχείο Java (JAR). Στην πραγματικότητα, αυτός είναι ένας στόχος να έχετε αρχεία βάζων. Ένα άλλο είναι να επιτρέπεται στους χρήστες να εκτελούν εύκολα την εφαρμογή που είναι αποθηκευμένη στο αρχείο. Γιατί λοιπόν τα αρχεία βάζων πολίτες δεύτερης κατηγορίας στο σύμπαν της Java - λειτουργούν μόνο ως αρχεία - όταν μπορούν να είναι πρώτης τάξεως, ακριβώς δίπλα σε εγγενή εκτελέσιμα;
Για να εκτελέσετε ένα αρχείο βάζου, μπορείτε να χρησιμοποιήσετε το
Ιάβα
εντολή
-δοχείο
επιλογή. Για παράδειγμα, ας πούμε ότι έχετε ένα τρέξιμο αρχείο βάζου που ονομάζεται
myjar.jar
. Επειδή το αρχείο μπορεί να εκτελεστεί, μπορείτε να το εκτελέσετε ως εξής:
java -jar myjar.jar
.
Εναλλακτικά, το Java Runtime Environment (JRE), όταν εγκαθίσταται σε λειτουργικό σύστημα όπως τα Microsoft Windows, συσχετίζει αρχεία βάζων με το JVM, ώστε να μπορείτε να κάνετε διπλό κλικ σε αυτά για να εκτελέσετε την εφαρμογή. Αυτά τα JAR πρέπει να μπορούν να εκτελεστούν.
Η ερώτηση είναι: Πώς μπορείτε να κάνετε ένα JAR τρέξιμο;
Το αρχείο δήλωσης και η καταχώριση Main-Class
Μέσα στα περισσότερα JAR, ένα αρχείο που ονομάζεται
MANIFEST.MF
αποθηκεύεται σε έναν κατάλογο που ονομάζεται
ΜΕΤΑ-ΙΝΦ
. Μέσα σε αυτό το αρχείο, κάλεσε μια ειδική καταχώριση
Κύρια τάξη
λέει στο
java -jar
εντολή ποιας κλάσης θα εκτελεστεί.
Το πρόβλημα είναι ότι πρέπει να προσθέσετε σωστά αυτήν την ειδική καταχώριση στο αρχείο δήλωσης μόνοι σας - πρέπει να πάει σε ένα συγκεκριμένο μέρος και πρέπει να έχει μια συγκεκριμένη μορφή. Ωστόσο, ορισμένοι από εμάς δεν τους αρέσει η επεξεργασία αρχείων διαμόρφωσης.
Αφήστε το API να το κάνει για εσάς
Από την Java 1.2, ονομάστηκε ένα πακέτο java.util.jar
σας έχει επιτρέψει να εργαστείτε με αρχεία βάζων. (Σημείωση: Βασίζεται στο java.util.zip
πακέτο.) Συγκεκριμένα, το πακέτο βάζων σάς επιτρέπει να χειρίζεστε εύκολα αυτό το ειδικό αρχείο δήλωσης μέσω του Δηλωτικό
τάξη.
Ας γράψουμε ένα πρόγραμμα που χρησιμοποιεί αυτό το API. Πρώτον, αυτό το πρόγραμμα πρέπει να γνωρίζει τρία πράγματα:
- Το JAR που θέλουμε να κάνουμε runnable
- Η κύρια τάξη που θέλουμε να εκτελέσουμε (αυτή η τάξη πρέπει να υπάρχει μέσα στο JAR)
- Το όνομα ενός νέου JAR για την έξοδο μας, γιατί δεν πρέπει απλώς να αντικαταστήσουμε αρχεία
Γράψτε το πρόγραμμα
Η παραπάνω λίστα θα αποτελέσει τα επιχειρήματα του προγράμματός μας. Σε αυτό το σημείο, ας επιλέξουμε ένα κατάλληλο όνομα για αυτήν την εφαρμογή. Πώς κάνει MakeJarRunnable
ήχος?
Ελέγξτε τα ορίσματα στο κύριο
Ας υποθέσουμε ότι το κύριο σημείο εισόδου μας είναι ένα πρότυπο κύρια (συμβολοσειρά [])
μέθοδος. Πρέπει πρώτα να ελέγξουμε τα επιχειρήματα του προγράμματος εδώ:
if (args.length! = 3) {System.out.println ("Χρήση: MakeJarRunnable" + ""); System.exit (0); }
Δώστε προσοχή στον τρόπο ερμηνείας της λίστας ορισμάτων, καθώς είναι σημαντικό για τον ακόλουθο κώδικα. Η σειρά των επιχειρημάτων και τα περιεχόμενα δεν είναι λιτή. Ωστόσο, θυμηθείτε να τροποποιήσετε κατάλληλα τον άλλο κώδικα εάν τους αλλάξετε.
Αποκτήστε πρόσβαση στο JAR και στο αρχείο δήλωσης
Πρώτον, πρέπει να δημιουργήσουμε κάποια αντικείμενα που γνωρίζουν το JAR και τα αρχεία μανιφέστο:
// Δημιουργήστε το αντικείμενο JarInputStream και αποκτήστε το μανιφέστο JarInputStream jarIn = new JarInputStream (νέο FileInputStream (args [0])); Manifest manifest = jarIn.getManifest (); if (manifest == null) {// Αυτό θα συμβεί εάν δεν υπάρχει μανιφέστο manifest = new Manifest (); }
Ορίστε το χαρακτηριστικό Main-Class
Βάζουμε το Κύρια τάξη
καταχώριση στην κύρια ενότητα χαρακτηριστικών του αρχείου δήλωσης. Μόλις λάβουμε αυτό το σύνολο χαρακτηριστικών από το αντικείμενο δήλωσης, μπορούμε να ορίσουμε την κατάλληλη κύρια κλάση. Ωστόσο, τι γίνεται αν Κύρια τάξη
υπάρχει ήδη το χαρακτηριστικό στο αρχικό JAR; Αυτό το πρόγραμμα εκτυπώνει απλά μια προειδοποίηση και βγαίνει. Ίσως θα μπορούσαμε να προσθέσουμε ένα όρισμα γραμμής εντολών που λέει στο πρόγραμμα να χρησιμοποιεί τη νέα τιμή αντί της προϋπάρχουσας:
Χαρακτηριστικά a = manifest.getMainAttributes (); String oldMainClass = a.putValue ("Main-Class", args [1]); // Εάν υπάρχει μια παλιά τιμή, πείτε στον χρήστη και πραγματοποιήστε έξοδο εάν (oldMainClass! = Null) {System.out.println ("Προειδοποίηση: παλιά τιμή Main-Class είναι:" + oldMainClass); System.exit (1); }
Έξοδος του νέου JAR
Πρέπει να δημιουργήσουμε ένα νέο αρχείο βάζου, οπότε πρέπει να χρησιμοποιήσουμε το JarOutputStream
τάξη. Σημείωση: Πρέπει να διασφαλίσουμε ότι δεν χρησιμοποιούμε το ίδιο αρχείο για έξοδο όπως και για την εισαγωγή. Εναλλακτικά, ίσως το πρόγραμμα θα πρέπει να εξετάσει την περίπτωση όπου τα δύο αρχεία βάζων είναι τα ίδια και να ζητήσει από τον χρήστη εάν επιθυμεί να αντικαταστήσει το πρωτότυπο. Ωστόσο, το διατηρώ ως άσκηση για τον αναγνώστη. Ενεργοποιήστε τον κωδικό!
System.out.println ("Γράφοντας σε" + args [2] + "..."); JarOutputStream jarOut = νέο JarOutputStream (νέο FileOutputStream (args [2]), μανιφέστο);
Πρέπει να γράψουμε κάθε καταχώριση από την είσοδο JAR στην έξοδο JAR, ώστε να επαναλάβετε τις καταχωρίσεις:
// Δημιουργήστε ένα buffer ανάγνωσης για μεταφορά δεδομένων από το byte εισαγωγής [] buf = νέο byte [4096]; // Επαναλάβετε τις καταχωρήσεις JarEntry? ενώ ((είσοδος = jarIn.getNextJarEntry ())! = null) {// Εξαιρέστε το αρχείο δήλωσης από το παλιό JAR εάν ("META-INF / MANIFEST.MF" .equals (entry.getName ())) συνεχίστε; // Γράψτε την καταχώρηση στην έξοδο JAR jarOut.putNextEntry (είσοδος); int διάβασμα? ενώ ((read = jarIn.read (buf))! = -1) {jarOut.write (buf, 0, read); } jarOut.closeEntry (); } // Ξεπλύνετε και κλείστε όλες τις ροές jarOut.flush (); jarOut.close (); jarIn.close ();
Πλήρες πρόγραμμα
Φυσικά, πρέπει να τοποθετήσουμε αυτόν τον κωδικό μέσα σε ένα κύριος
μέθοδο, μέσα σε μια τάξη και με ένα κατάλληλο σύνολο δηλώσεων εισαγωγής. Η ενότητα Πόροι παρέχει το πλήρες πρόγραμμα.
Παράδειγμα χρήσης
Ας χρησιμοποιήσουμε αυτό το πρόγραμμα με ένα παράδειγμα. Ας υποθέσουμε ότι έχετε μια εφαρμογή της οποίας το κύριο σημείο εισόδου είναι σε μια κλάση που ονομάζεται Γεια σαςRunnableWorld
. (Αυτό είναι το πλήρες όνομα της τάξης.) Υποθέστε επίσης ότι έχετε δημιουργήσει ένα JAR που ονομάζεται myjar.jar
, που περιέχει ολόκληρη την εφαρμογή. Τρέξιμο MakeJarRunnable
σε αυτό το αρχείο βάζου έτσι:
java MakeJarRunnable myjar.jar HelloRunnableWorld myjar_r.jar
Και πάλι, όπως αναφέρθηκε προηγουμένως, παρατηρήστε πώς παραγγέλνω τη λίστα επιχειρημάτων. Εάν ξεχάσετε την παραγγελία, απλώς εκτελέστε αυτό το πρόγραμμα χωρίς ορίσματα και θα απαντήσει με ένα μήνυμα χρήσης.
Προσπαθήστε να εκτελέσετε το
java -jar
εντολή
myjar.jar
και μετά
myjar_r.jar
. Σημειώστε τη διαφορά! Αφού το κάνετε αυτό, εξερευνήστε τα αρχεία δήλωσης (
META-INF / MANIFEST.MF
) σε κάθε JAR. (Μπορείτε να βρείτε και τα δύο JAR στο
πηγαίος κώδικας
.)
Ακολουθεί μια πρόταση: Προσπαθήστε να κάνετε το MakeJarRunnable
πρόγραμμα σε ένα τρέξιμο JAR!
Τρέξτε με αυτό
Η εκτέλεση ενός JAR κάνοντας διπλό κλικ σε αυτό ή χρησιμοποιώντας μια απλή εντολή είναι πάντα πιο βολικό από το να πρέπει να το συμπεριλάβετε στο classpath και να εκτελείτε μια συγκεκριμένη κύρια τάξη. Για να σας βοηθήσουμε να το κάνετε αυτό, η προδιαγραφή JAR παρέχει ένα Κύρια τάξη
χαρακτηριστικό για το αρχείο δήλωσης του JAR. Το πρόγραμμα που παρουσιάζω εδώ σας επιτρέπει να χρησιμοποιήσετε το Java JAR API για να χειριστείτε εύκολα αυτό το χαρακτηριστικό και να κάνετε τα JAR σας να εκτελούνται.
Μάθετε περισσότερα σχετικά με αυτό το θέμα
- Κατεβάστε τον πηγαίο κώδικα και τα JAR για αυτήν την συμβουλή
//images.techhive.com/downloads/idge/imported/article/jvw/2002/05/makejarrunnable.zip
- "Java Tip 120Execute Self-Extracting JARs," Z. Steve Jin and John D. Mitchell (JavaWorld, Νοέμβριος 2001)
//www.javaworld.com/javaworld/javatips/jw-javatip120.html
- Προδιαγραφή αρχείου JAR
//java.sun.com/j2se/1.3/docs/guide/jar/jar.html
- βάζο - Το εργαλείο αρχειοθέτησης Java
//java.sun.com/j2se/1.3/docs/tooldocs/win32/jar.html
- Δείτε όλα τα προηγούμενα Συμβουλές Java και υποβάλετε το δικό σας
//www.javaworld.com/javatips/jw-javatips.index.html
- Μάθετε Java από την αρχή προς τα πάνω JavaWorld 'μικρό Java 101 στήλη
//www.javaworld.com/javaworld/topicalindex/jw-ti-java101.html
- Οι ειδικοί της Java απαντούν στις πιο δύσκολες ερωτήσεις σας στο Java JavaWorld 'μικρό Ε & Α Java στήλη
//www.javaworld.com/javaworld/javaqa/javaqa-index.html
- Περιηγηθείτε στο Πυρήνας Java τμήμα του JavaWorld 'Τοπ Ευρετήριο
//www.javaworld.com/channel_content/jw-core-index.shtml
- Παραμείνετε στην κορυφή μας Συμβουλές και κόλπα εγγραφείτε στο JavaWorld 'δωρεάν εβδομαδιαία ενημερωτικά δελτία email
//www.javaworld.com/subscribe
- Μάθετε τα βασικά του Java από την πλευρά του πελάτη JavaWorld 'μικρό Αρχάριος Java συζήτηση. Τα βασικά θέματα περιλαμβάνουν τη γλώσσα Java, την εικονική μηχανή Java, τα API και τα εργαλεία ανάπτυξης
//forums.idg.net/webx?50@@.ee6b804
- Θα βρείτε πληθώρα άρθρων που σχετίζονται με την πληροφορική από τις αδελφές εκδόσεις μας στο .net
Αυτή η ιστορία, "Java Tip 127: See JAR run" δημοσιεύθηκε αρχικά από το JavaWorld.