Cet article décrit en détail l'utilisation de la commande JAR, ce qui sera utile à chacun pour apprendre et résumer l'utilisation de la commande jar. Les détails sont les suivants :
Le package JAR est un document compressé unique en Java. En fait, tout le monde peut le comprendre comme un package .zip. Bien sûr, il existe des différences. Il existe un fichier META-INF/MANIFEST.MF dans le package JAR. Lorsque vous trouvez le package JAR, il sera automatiquement généré.
Le package JAR est généré par la commande /bin/jar.exe du répertoire d'installation du JDK. Lorsque nous installons le JDK et définissons le chemin, nous pouvons utiliser la commande jar.exe normalement. Elle utilisera les classes de lib/tool.jar. paquet d'outils. Ne vous inquiétez pas de ces détails.
Voyons comment il est utilisé :
1. paramètres de la commande jar :
format de commande jar : jar {ctxuf}[ vme 0 M i ][-C directory] nom de fichier...
Parmi eux, l'un des quatre paramètres {ctxu} doit être sélectionné. [vfme 0 M i ] est un paramètre facultatif et le nom du fichier est également requis.
-c crée un paquet jar
-t affiche une liste du contenu du pot
-x décompresser le paquet jar
-u ajoute des fichiers au package jar
-f spécifie le nom de fichier du package jar
-v génère des rapports détaillés et les envoie aux appareils standard
-m spécifie le fichier manifest.mf. (Vous pouvez définir certains paramètres pour le package jar et son contenu dans le fichier manifest.mf)
-0 ne compresse pas le contenu du package jar lors de sa génération
-M Ne génère pas de fichier manifeste (Manifest.mf) pour tous les fichiers. Ce paramètre est identique au paramètre qui ignore le paramètre -m.
-i crée un fichier d'index pour le fichier jar spécifié
-C signifie aller dans le répertoire correspondant pour exécuter la commande jar, ce qui équivaut à cd dans ce répertoire, puis exécuter la commande jar sans -C
2. Exemples d'utilisation de pots :
(1) Créer un package de pots
jar cf bonjour.jar bonjour
Utilisez le répertoire test pour générer le package hello.jar si hello.jar existe, il sera écrasé.
(2) Créer et afficher le processus d'emballage
jar cvf bonjour.jar bonjour
Utilisez le répertoire hello pour créer le package hello.jar et montrez un exemple du processus de création :
E:/>jar cvf bonjour.jar bonjour
Manifeste
Ajouter : bonjour/(lecture = 0) (écriture = 0) (0 % stocké)
Ajouté : hello/TestServlet2.class (lecture = 1497) (écriture = 818) (compressé à 45 %)
Ajouté : hello/HelloServlet.class (lecture = 1344) (écriture = 736) (compressé à 45 %)
Ajouté : hello/TestServlet1.class (lecture = 2037) (écriture = 1118) (compressé à 45 %)
(3) Emballage de pot d'affichage :
jar tvf hello.jar Afficher le contenu du package hello.jar Le package jar spécifié doit réellement exister, sinon FileNoutFoundException se produira.
(4) Décompressez le paquet du pot :
pot xvf bonjour.jar
Décompressez hello.jar dans le répertoire actuel
(5) Ajouter des fichiers au pot :
jar uf bonjour.jar HelloWorld.java
Ajouter HelloWorld.java au package hello.jar
(6) Créer un package jar de contenu non compressé :
jar cvf0 bonjour.jar *.class
Générez un package jar non compressé en utilisant tous les fichiers .class du répertoire actuel
(7) Créez un package jar avec le fichier manifest.mf :
jar cvfm bonjour.jar manifest.mf bonjour
Le package jar créé a un répertoire META-INF supplémentaire, et le répertoire META-INF a un fichier manifest.mf supplémentaire. Quant au rôle de manifest.mf, il sera mentionné plus tard.
(8) Ignorez le fichier manifest.mf :
jar cvfM bonjour.jar bonjour
Le package jar généré n'inclut pas le répertoire META-INF ni le fichier manifest.mf.
(9) Ajouter une application -C :
jar cvfm bonjour.jar mymanifest.mf -C bonjour/
Cela signifie basculer vers le répertoire hello puis exécuter la commande jar.
(10)-i génère une liste d'index pour le fichier jar :
Lorsque le contenu d'un package jar est très bon, vous pouvez générer un fichier d'index pour celui-ci, ce qui semble très simple.
jar je bonjour.jar
Après avoir exécuté cette commande, il générera un fichier d'index nommé INDEX.LIST dans le dossier META-INF du package hello.jar. Il générera une liste avec le nom du package jar en haut.
(11) Exportez la liste de décompression :
jar tvf hello.jar >hello.txt Si vous souhaitez voir le processus détaillé de décompression d'un fichier jar et que le package jar est volumineux, les informations à l'écran clignoteront à ce moment-là, vous pouvez afficher la liste dans un fichier et. appréciez lentement !
(12)jar -cvf bonjour.jar bonjour/*
Par exemple, la structure de répertoires d'origine est la suivante :
Bonjour
|---com
|---org
À l'origine, vous souhaitiez empaqueter uniquement le répertoire com et le répertoire org, mais pour le moment, la commande jar sera empaquetée avec hello. Tout le monde devrait y prêter attention. Le fichier compressé généré par la commande jar inclura le répertoire qui le suit. Nous devons entrer dans le répertoire hello et exécuter la commande jar.
Remarque : L'utilisateur peut spécifier arbitrairement le nom de fichier manifest.mf, mais la commande jar ne reconnaît que Manifest.mf. Elle convertira le nom de fichier spécifié par l'utilisateur en conséquence, ce qui signifie que l'utilisateur n'a pas à s'inquiéter.
3.Règles d'écriture du fichier Manifest.mf :
Vous devez faire attention à certains détails lors de l'écriture de manifest.mf. C'est très exigeant. J'ai rencontré de nombreuses erreurs ici. Qui le rend si avare, alors je le liste ici pour tout le monde.
(1) Lorsqu'il ne peut y avoir de lignes vides ou d'espaces, la première ligne ne peut pas être une ligne vide (il ne peut pas y avoir de ligne vide avant la première ligne), il ne peut pas y avoir de ligne vide entre les lignes et il ne peut pas y avoir de ligne vide à la fin de la première ligne. la fin de la ligne. Il y a des espaces.
(2) Il doit y avoir une ligne vide, et la dernière ligne doit être une ligne vide (ajoutez simplement un retour chariot après avoir saisi votre contenu)
(3) Il doit y avoir un espace
clé : la valeur doit être écrite avec un espace après le point-virgule
4. Comment utiliser les classes dans les packages jar
Écrivons un petit exemple, tellement intuitif !
public final class Person{ public static int age() { return 30 }}-> javac Personne.java->jar cvf personne.jar Personne.class
Transformez le fichier ci-dessus en un package jar
Écrivez une autre classe pour l'appeler :
public class MyAge{ public static void getAge() { System.out.println(Person.age() }})->javac MonAge.java ->java -classpath personne.jar MonAge
Les lecteurs intéressés peuvent déboguer ce programme
5. Créer un package jar exécutable
Parfois, lorsque vous écrivez un programme par vous-même, il y a beaucoup de classes. Au fil du temps, vous ne savez même pas laquelle est la classe principale. De plus, de nombreuses images ou autres fichiers peuvent être utilisés, ce qui rend les choses confuses. à lire. À ce stade, vous pouvez envisager d'en faire un package jar exécutable...
(1) Modifiez le fichier manifest.mf et ajoutez la ligne suivante
Classe principale : MyApplet
Remarque : La taille de la classe principale est déterminée, l'espace après les deux points et la saisie après MyApplet doivent être saisis, puis enregistrés.
(2) Emballage
jar cvfm FirstApplet.jar manifest.mf MyApplet.class
Remarque : manifest.mf est spécifié comme chemin de classe (tel que : hello.Hello) ou nom de fichier (applet) où le fichier Mani-Class : MyApplet est stocké.
(3) Utilisation du pot exécutable
java -jar PremierApplet.jar
Il peut également être utilisé dans <applet></applet> :
<applet code=MyApplet archive=FirstApplet.jar width=200 height=100></applet>
Remarque : La classe n'est pas donnée. Vous pouvez simplement en écrire une. Vous pouvez décider du nom de la classe et du nom du package à votre guise.
6. Prolongez vos propres cours
Dans le répertoire d'installation du JDK/jre/lib/ext, SUN nous permet de développer nos propres classes. Vous pouvez saisir vos propres fichiers de classe dans des packages .jar et les placer dans ce répertoire. Il est installé par la classe ExtClassLoader. Le chargeur de classe est responsable du chargement et le chargeur de classe ExtClassLoader est AppClassL. Le chargeur parent du chargeur de classe Loader, AppClassLoader, est principalement responsable du chargement des fichiers sous le chemin CLASSPATH, et le mécanisme utilisé en Java consiste à déléguer le chargeur parent, de sorte que les fichiers de classe dans le jar stockés dans ce répertoire n'ont aucun settings. , le chargeur de classe peut trouver le chargement normal, n'est-ce pas très pratique, ha...
Si votre .jar est destiné aux applications applet, vous pouvez ajouter les deux lignes suivantes à son manifest.mf avant de le conditionner dans un package jar.
Chemin de classe : FirstApplet.jarClass-path : SecondApplet.jarMain-Class : MyApplet
Remarque : le chemin de classe peut être défini sur plusieurs éléments, écrivez simplement le nom du package jar directement. La classe principale est principalement utilisée lorsqu'il y a plusieurs fichiers de classe .class dans le fichier jar. Java ne sait pas laquelle est la classe principale, elle doit donc être spécifiée s'il n'y a qu'une seule classe dans le package jar, bien sûr. il n'est pas nécessaire de le préciser.
L'ordre dans lequel Java appelle les classes : Classes dans java/lib/ext ---> Classes spécifiées dans Manifest.mf --> Classes dans le répertoire actuel --> Classes spécifiées dans l'ensemble CLASSPATH.
7. Appelez le package jar sur le réseau URL
(1) Générer l'URL du package jar
URL u=nouvelle URL("jar:"+"FirstAppplet.jar"+!/");
(2) Créer un objet jarURLConnection
JarURLConnection juc=(JarURLConnection)u.openConnection();
(3) Renvoie le nom de la classe principale dans le package jar
Attributs attr=juc.getMainAttributes();String name=attr.getValue("Mani-Class");
Assurez-vous que l'attribut Mani-Class est correctement défini dans manifest.mf dans votre package jar. Encore une fois, vous devez faire attention aux règles.
(4) Créez un objet Class basé sur le nom de classe principale obtenu
Classe c=Class.forName(nom);
(5) Appelez sa méthode principale en fonction de l'objet Class :
Méthode cm=c.getMethod("main",new Class[]{String.class}); cm.invoke(null,new Object[]{});
Astuce : ce qui précède utilise les connaissances sur le mécanisme de réflexion Reflection. Si vous êtes intéressé par plusieurs mécanismes de réflexion, vous pouvez consulter le contenu pertinent dans le package java.lang.reflect.
8. Conseils sur l'utilisation des commandes JAR :
(1) jar crée un fichier ZIP compressé
jar cvfM TestZIP.jar tester
Ajoutez simplement le paramètre M afin de ne pas générer de contenu lié à META-INF, puis remplacez TestZIP.jar par TestZIP.zip. N'est-ce pas très simple....
(2) Utilisez WinRAR pour décompresser le fichier .jar
Comme nous l'avons dit ci-dessus, le fichier JAR est un fichier compressé spécial, il peut donc bien sûr être décompressé à l'aide de certains de nos outils de décompression couramment utilisés. Quant à la façon de le décompresser, je n'ai pas besoin de vous le dire.
(3) Utilisez WinRAR pour générer des fichiers .jar
Nous avons déjà dit que la principale différence entre les packages JAR et les packages ZIP est qu'il existe un répertoire META-INF supplémentaire dans le package JAR. Il existe un fichier manifest.mf sous le répertoire META-INF. répertoire et compressez-le.
La structure des répertoires est la suivante :
Pot de test
|--META-INF
|--manifest.mf
|--Fichiers de classe associés