java:jar_files

Αρχεία Java Archive (JAR)

Τα αρχεία JAR μας δίνουν την δυνατότητα να ομαδοποιήσουμε πολλαπλά αρχεία .class σε ένα αρχείο (archive). Ένα αρχείο JAR περιέχει σε συμπιεσμένη μορφή τα εξής:

  1. .class files
  2. Συμπληρωματικά αρχεία που συνδέονται με Java applets και applications.
  3. Το αρχείο MANIFEST.MF για το οποίο θα μιλήσουμε στη συνέχεια.

Το βασικό πλεονέκτημα των αρχείων JAR είναι ότι αντικαθιστούν πολύπλοκες ιεραρχίες πακέτων και κλάσεων με ένα μόνο αρχείο. Επίσης, τα αρχεία JAR είναι συμπιεσμένα, επομένως καταλαμβάνουν λιγότερο χώρο και μεταφέρονται πιο γρήγορα όταν πρόκειται για web applications. Παρακάτω θα δούμε πώς δημιουργούμε ή μεταβάλουμε JAR αρχεία και θα εξηγήσουμε τι είναι το MANIFEST.MF αρχείο και γιατί χρησιμοποιείται.

Δημιουργία JAR files

Η βασική εντολή για την δημιουργία ενός jar file είναι η παρακάτω:

jar cf jar-file input-file(s)

Επανερχόμενοι στο παράδειγμα του homework1 του μαθήματος CE325, ας υποθέσουμε ότι έχουμε όλα τα .java αρχεία σε ένα υποφάκελο src και τα .class αρχεία σε ένα υποφάκελο build. Θέλουμε να δημιουργήσουμε ένα jar αρχείο που να περιέχει όλα τα .class αρχεία. Το αρχείο αυτό θα το βάλουμε μεσα στον κατάλογο homework1.

cd homework1/build/
jar cvf homework1.jar ./*.class
mv homework1.jar ../

Εναλλακτικά, θα μπορούσαμε να γράψουμε

cd homework1
jar cvf homework1.jar -C build/ ./*.class

Η παραπάνω εντολή εκτελεί την εντολή jar μέσα στο directory build/ και αποθηκεύει το jar file στο αρχείο homework1. Τα υπόλοιπα options έχουν ως εξής.

Option Περιγραφή
v Verbose: Δείχνει ποια αρχεία προστίθενται μέσα στο jar file κατά την δημιουργία του
c Create:
0 no compression added to the jar file
M το Manifest αρχείο που προστίθεται δεν θα προστεθεί
m Χρησιμοποιείται για να προστεθεί ειδική πληροφορία στο Manifest αρχείο, ως εξής
jar cmf extra-manifest.txt jar-file input-file(s) 

, όπου το αρχείο extra-manifest.txt περιέχει την επιπλέον πληροφορία που θέλουμε να προσθέσουμε.

C αλλαγή του τρέχοντος καταλόγου πριν την εκτέλεση της εντολής jar

Βλέποντας τα περιεχόμενα ενος JAR file

Για να δείτε τα περιεχόμενα ενός JAR file αρκεί να χρησιμοποιήσετε την εντολή

jar tf jar-file

Για να δείτε τα περιεχόμενα του homework1.jar αρκεί να γράψετε

jar tf homework1.jar

Εξαγωγή των περιεχομένων αρχείων ενός JAR file

Για να εξάγετε τα περιεχόμενα ενός JAR file αρκεί να χρησιμοποιήσετε την εντολή

jar xf jar-file

Για να εξάγετε τα περιεχόμενα του homework1.jar αρκεί να γράψετε

jar xf homework1.jar

Εκτελώντας λογισμικό σε αρχεία JAR

Μπορείτε να εκτελέσετε ένα πρόγραμμα που βρίσκεται σε ένα αρχείο JAR χρησιμοποιώντας την παρακάτω εντολή

java -jar jar-file

To flag -jar ενημερώνει το περιβάλλον εκτέλεσης ότι η εφαρμογή είναι πακεταρισμένη μέσα σε ένα αρχείο jar. Μπορείτε να χρησιμοποιήσετε μόνο ένα αρχείo jar για την παραπάνω δήλωση. Για να εκτελεστεί με επιτυχία το παραπάνω πρόγραμμα απαραίτητη προϋπόθεση είναι το περιβάλλον εκτέλεσης να γνωρίζει ποια κλάση από όσες περιέχονται μέσα στο jar αρχείο είναι η κλάση από την οποία ξεκινά η εφαρμογή. Η κλάση εκκίνησης είναι η κλάση που περιέχει μία συνάρτηση

public static void main(String args[]) { .... }

Για να προσδιορίσετε την κλάση εκκίνησης μέσα στο jar αρχείο, αρκεί να προσθέσετε μέσα στο αρχείο MANIFEST.MF την ακόλουθη γραμμή

Main-Class: myMainClass

Για την δημιουργία ενός JAR αρχείου που περιέχει στο MANIFEST.MF αρχείo την παραπάνω γραμμή αρκεί να κάνουμε τα εξής.

  1. Δημιουργούμε ένα αρχείο text (π.χ. manifest-info.txt) που περιέχει την γραμμή που θέλουμε να προσθέσουμε στο MANIFEST.MF αρχείο δηλ. Main-Class: myMainClass.
  2. Στη συνέχεια δημιουργούμε jar αρχείο ως εξής
    jar cvfm homework1.jar manifest-info.txt ./

    . Παραρητήστε την προσθήκη του option 'm' σε συνδυασμό με την χρήση του αρχείου που δημιουργήσαμε και περιέχει το extra header για το MANIFEST.MF.

Αν δεν θέλετε να φτιάξετε αρχείο txt θα μπορούσατε να γράψετε το εξής.

jar cvfe homework1.jar myMainClass ./*.class

Όταν εκτελούμε λογισμικό με χρήση αρχείων JAR η επιλογή –classpath δεν λαμβάνεται υπόψη. Σε αυτή την περίπτωση όλες οι βιβλιοθήκες που είναι απαραίτητες για το πρόγραμμα μας (εκτός από τις standard βιβλιοθήκες της Java) θα πρέπει να βρίσκονται μέσα στο συγκεκριμένο αρχείο JAR.

java/jar_files.txt · Last modified: 2016/02/26 11:15 (external edit)