Que contient exactement un fichier JAR?

88

En tant que stagiaire, j'utilise le code entreprise dans mes projets et ils m'envoient généralement un jarfichier avec lequel travailler. Je l' ajoute à la construction pathdans Eclipseet généralement tout va bien et dandy.

Cependant, je suis devenu curieux de savoir ce que chaque classe contenait et lorsque j'essaie d'ouvrir l'une des classes du jarfichier, cela me dit que j'ai besoin d'un fichier source.

Qu'est-ce que ça veut dire? Je viens d'un arrière-plan C / C ++ donc un fichier jarsimilaire à un .ofichier déjà compilé et tout ce que je peux voir, c'est le .htruc? Ou y a-t-il du code réel dans le jarfichier que j'utilise qui est chiffré pour que je ne puisse pas le lire?

Merci pour toutes les réponses!

Edit:
Merci, les gars, je savais que c'était une sorte d'archive, mais je ne comprenais pas pourquoi quand j'ai essayé d'ouvrir les .classfichiers, j'avais un tas de caractères aléatoires. La sortie était similaire lorsque j'ai essayé d'ouvrir un .ofichier en C donc je voulais juste m'en assurer.
Merci!

Joshualan
la source
1
Format de fichier JAR
mellamokb
5
@Blue Moon: Le plus drôle, c'est que Google me conduit ici. : p
user1036719
@ user1036719 Bien qu'il soit bon que vous ayez trouvé la réponse ici, il y a encore un autre lien qui précède cela. Et ce n'est pas vraiment une question de programmation qui doit être encouragée sur SO. Je n'ai pas contre-voté ou fermé le vote.
PP

Réponses:

88

Un fichier JAR n'est en fait qu'un fichier ZIP. Il peut contenir n'importe quoi - il contient généralement du code Java compilé (* .class), mais parfois aussi du code source Java (* .java).

Cependant, Java peut être décompilé - au cas où le développeur obscurcirait son code, vous n'obtiendrez pas de noms de classe / fonction / variable utiles.

ThiefMaster
la source
53

Cependant, je suis devenu curieux de savoir ce que chaque classe contenait et lorsque j'essaye d'ouvrir l'une des classes dans le fichier jar, cela me dit que j'ai besoin d'un fichier source.

Un fichier jar est essentiellement un fichier zip contenant des fichiers .class et potentiellement d'autres ressources (et des métadonnées sur le fichier jar lui-même). Il est vraiment difficile de comparer C à Java, car le code d'octets Java contient beaucoup plus de métadonnées que la plupart des formats binaires - mais le fichier de classe est du code compilé au lieu du code source.

Si vous ouvrez le fichier jar avec un utilitaire zip ou si jar xf foo.jarvous exécutez, vous pouvez en extraire les fichiers et les examiner. Notez que vous n'avez pas besoin d' un fichier jar pour exécuter du code Java - les chargeurs de classe peuvent charger des données de classe directement à partir du système de fichiers, ou à partir d'URL, ainsi qu'à partir de fichiers jar.

Jon Skeet
la source
Merci, je savais que c'était un peu comme une archive puisque je pouvais la décompresser, mais je ne savais pas pourquoi aucun des fichiers .class ne contenait de texte lisible. Merci d'avoir expliqué, je suppose qu'un .class est un peu comme un fichier .o.
joshualan
19

La meilleure façon de comprendre ce que contient le fichier jar est d'exécuter ceci:

Accédez à la ligne de commande et exécutez jar tvf jarfilename.jar

Ajay George
la source
13

Un jarfichier est un fichier zip avec des fichiers supplémentaires contenant des métadonnées. (Malgré l'extension .jar, il est au format zip et tous les utilitaires qui traitent les fichiers .zip sont également capables de traiter les fichiers .jar.)

http://docs.oracle.com/javase/8/docs/technotes/guides/jar/index.html

Les fichiers Jar peuvent contenir tout type de fichiers, mais ils contiennent généralement des fichiers de classe et des fichiers de configuration de support (propriétés), des graphiques et d'autres fichiers de données nécessaires à l'application.

Les fichiers de classe contiennent du code Java compilé, qui est exécutable par la machine virtuelle Java.

http://en.wikipedia.org/wiki/Java_class_file

theglauber
la source
1
plus 1 parce que vous vous connectez à la norme
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
10

JAR signifie Java ARchive. Il s'agit d'un format de fichier basé sur le format de fichier ZIP populaire et utilisé pour regrouper de nombreux fichiers en un seul. Bien que JAR puisse être utilisé comme un outil d'archivage général, la motivation principale de son développement était de permettre aux applets Java et à leurs composants requis (fichiers .class, images et sons) d'être téléchargés sur un navigateur en une seule transaction HTTP, plutôt que d'ouvrir une nouvelle connexion pour chaque pièce. Cela améliore considérablement la vitesse à laquelle une applet peut être chargée sur une page Web et commencer à fonctionner. Le format JAR prend également en charge la compression, ce qui réduit la taille du fichier et améliore encore le temps de téléchargement. De plus, les entrées individuelles d'un fichier JAR peuvent être signées numériquement par l'auteur de l'applet pour authentifier leur origine.

oxy_js
la source
5

Le fichier Jar contient des classes binaires Java compilées sous la forme *.classdesquelles peuvent être converties en .javaclasse lisible en la décompilant à l'aide d'un décompilateur open source. Le jar a également une option META-INF/MANIFEST.MFqui nous indique comment utiliser le fichier jar - spécifie d'autres fichiers jar à charger avec le jar.

Piyush Mattoo
la source
3

Jar (Java Archive) contient un groupe de fichiers .class.

1.Pour créer un fichier Jar (fichier Zip)

 if one .class (say, Demo.class) then use command jar -cvf NameOfJarFile.jar Demo.class (usually it’s not feasible for only one .class file)

 if more than one .class (say, Demo.class , DemoOne.class) then use command jar -cvf NameOfJarFile.jar Demo.class DemoOne.class

 if all .class is to be group (say, Demo.class , DemoOne.class etc) then use command jar -cvf NameOfJarFile.jar *.class

Pour extraire le fichier Jar (décompresser le fichier)

    jar -xvf NameOfJarFile.jar

3. pour afficher la table des matières

    jar -tvf NameOfJarFile.jar
bishwas pokharel
la source
2

Un fichier .jar s'apparente à un fichier .exe. En substance, ce sont tous deux des fichiers zip exécutables (différents algorithmes zip).

Dans un fichier jar, vous verrez des dossiers et des fichiers de classe. Chaque fichier de classe est similaire à votre fichier .o et est une archive java compilée.

Si vous vouliez voir le code dans un fichier jar, téléchargez un décompilateur java (situé ici: http://java.decompiler.free.fr/?q=jdgui ) et un extracteur .jar (7zip fonctionne très bien).

Tyzoid
la source
1

JD-GUI est un outil très pratique pour parcourir et décompiler les fichiers JAR

Anton Arhipov
la source
1
Cela ne répond pas à la question.
Craig Fisher le
1

Un fichier .jar contient du code compilé (fichiers * .class) et d'autres données / ressources liées à ce code. Il vous permet de regrouper plusieurs fichiers dans un seul fichier d'archive. Il contient également des métadonnées. Puisqu'il s'agit d'un fichier zip, il est capable de compresser les données que vous y mettez.

Quelques choses que j'ai trouvées utiles.

http://www.skylit.com/javamethods/faqs/createjar.html

http://docs.oracle.com/javase/tutorial/deployment/jar/basicsindex.html

Le livre OSGi définit en pratique les fichiers JAR comme suit: "Les JAR sont des fichiers d'archive basés sur le format de fichier ZIP, ce qui permet d'agréger de nombreux fichiers en un seul fichier. En général, les fichiers contenus dans l'archive sont un mélange de fichiers de classe Java compilés et de ressources des fichiers tels que des images et des documents. De plus, la spécification définit un emplacement standard dans une archive JAR pour les métadonnées - le dossier META-INF - et plusieurs noms et formats de fichiers standard directement dans ce dernier, le plus important étant le fichier MANIFEST.MF. "

Wazza
la source
1

Vérifiez simplement si le aopalliance.jarfichier contient des .javafichiers au lieu de .classfichiers. si c'est le cas, extrayez simplement le fichier jar, importez-le dans eclipse et créez un fichier jar via eclipse. Cela a fonctionné pour moi.

Ghanshyam
la source
1

En apprenant à propos de JAR, je suis tombé sur ce fil, mais je n'ai pas pu obtenir suffisamment d'informations pour des personnes comme moi, qui ont une expérience .NET, je vais donc ajouter quelques points qui peuvent aider des personnes comme moi avec une expérience.

Tout d'abord, nous devons définir un concept similaire à JAR dans .NET qui est Assembly et Assembly partage beaucoup en commun avec les fichiers JAR Java.

Ainsi, un assembly est l'unité fondamentale de l'empaquetage de code dans l'environnement .NET. Les assemblys sont autonomes et contiennent généralement le code intermédiaire des classes de compilation, des métadonnées sur les classes et tous les autres fichiers nécessaires au code packagé pour effectuer sa tâche. Étant donné que les assemblys sont l'unité fondamentale de l'empaquetage de code, plusieurs actions liées à l'interaction avec les types doivent être effectuées au niveau de l'assembly. Par exemple , l'octroi d'autorisations de sécurité, le déploiement de code et la gestion des versions sont effectués au niveau de l'assembly.

Les fichiers JAR Java exécutent une tâche similaire en Java, la plupart des différences étant dans l'implémentation. Les assemblys sont généralement stockés sous forme de fichiers EXE ou DLL tandis que les fichiers JAR sont stockés au format de fichier ZIP .

Source d'information -> 5- Assemblées

Muhammad Waqas Dilawar
la source