web-dev-qa-db-fra.com

Que contient exactement un fichier jar?

En tant que stagiaire, j'utilise le code de l'entreprise dans mes projets et ils m'envoient généralement un fichier jar avec lequel travailler. Je l’ajoute à la compilation path dans Eclipse et d’habitude, tout va bien et tout va bien.

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

Qu'est-ce que ça veut dire? Je viens d'un contexte C/C++, donc un jar est-il similaire à un fichier .o déjà compilé et tout ce que je peux voir, c'est le matériel .h? Ou y a-t-il du code chiffré dans le fichier jar que j'utilise qui empêche de le lire?

Merci pour toutes les réponses!

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

63
joshualan

Un fichier JAR est en réalité juste 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 dissimulerait son code, vous n'obtiendrez cependant aucun nom de classe/fonction/variable utile.

68
ThiefMaster

Cependant, je suis curieux de savoir ce que chaque classe contient et lorsque j'essaie d'ouvrir l'une des classes du 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 métadonnées sur le jar lui-même). Il est difficile de comparer le C à Java, car le code octet Java conserve beaucoup plus de métadonnées que la plupart des formats binaires, mais le fichier de classe is code compilé au lieu du code source.

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

47
Jon Skeet

Le meilleur moyen de comprendre le contenu du fichier jar est d'exécuter ceci:

Aller à la ligne de commande et exécuter jar tvf jarfilename.jar

15
Ajay George

Un fichier jar est un fichier Zip avec quelques fichiers supplémentaires contenant des métadonnées. (Malgré l'extension .jar, il est au format Zip, et tous les utilitaires traitant des fichiers .Zip peuvent également 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 (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é, exécutable par la machine virtuelle Java.

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

10
theglauber

JAR signifie Java ARchive. C'est un format de fichier basé sur le format de fichier Zip populaire et est utilisé pour regrouper plusieurs fichiers en un seul. Bien que JAR puisse être utilisé comme un outil d’archivage général, la principale motivation 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 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 dans un fichier JAR peuvent être signées numériquement par l'auteur de l'applet pour authentifier leur origine.

6
oxy_js

Le fichier JAR contient des classes binaires Java compilées sous la forme *.class qui peuvent être converties en classe lisible .Java en les décompilant à l'aide d'un décompilateur open source. Le fichier jar a également un META-INF/MANIFEST.MF facultatif qui nous explique comment utiliser le fichier jar - spécifie les autres fichiers jar à charger avec le fichier jar.

4
Piyush Mattoo

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

2
Anton Arhipov

Il suffit de vérifier si le fichier aopalliance.jar contient des fichiers .Java au lieu de fichiers .class. dans ce cas, extrayez simplement le fichier jar, importez-le dans Eclipse et créez un fichier jar via Eclipse. Cela a fonctionné pour moi. 

1
Ghanshyam

Un fichier .jar s'apparente à un fichier .exe . Ce sont essentiellement 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 constitue une archive Java compilée.

Si vous voulez 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 bien ).

1
Tyzoid

Selon ma compréhension, le fichier JAR est identique à Zip mais contient des fichiers exécutables.

Si vous ne disposez pas de fichiers exécutables dans Jar, le résultat sera le même que pour le fichier Zip. Je veux dire pourquoi, utilisez Jar.

Étant donné que le fichier Jar contient des fichiers exécutables, ils peuvent être facilement chargés dans votre code et facilement transférés à d'autres utilisateurs.

0
Srekk

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

Nous devons d’abord définir un concept similaire à JAR dans .NET, qui est Assembly et Assembly partage beaucoup de points communs 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 provenant des classes de compilation, les métadonnées relatives aux classes et tout autre fichier requis par le code empaqueté pour effectuer sa tâche. Comme les assemblys constituent l’unité fondamentale de l’empaquetage de code, plusieurs actions liées à l’interaction avec des types doivent être effectuées au niveau de l’assemblage. Par exemple,, l'octroi des autorisations de sécurité, le déploiement du code et la gestion des versions sont effectués au niveau de l'assemblage.

Les fichiers Java JAR exécutent une tâche similaire en Java, la plupart des différences se situant au niveau de la mise en œuvre. Les assemblages sont généralement stockés sous la 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

0
Wiqi

Jar (archive Java) 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

2.Pour extraire le fichier JAR (fichier décompressé)

    jar -xvf NameOfJarFile.jar

3.Pour afficher la table des matières

    jar -tvf NameOfJarFile.jar
0
bishwas pokharel

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 avez insérées. 

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 fichiers JAR sont des fichiers d’archive basés sur le format de fichier Zip, Ils permettent d’agréger de nombreux fichiers en un seul fichier. En règle générale, les fichiers Contenus dans l’archive sont un mélange de fichiers de classe Java compilés et fichiers de ressources tels que images et documents. De plus, la spécification définit un emplacement standard dans une archive JAR pour les métadonnées - le dossier META-INF — ainsi que plusieurs noms et formats de fichiers standard au sein de que directement, le plus important est le fichier MANIFEST.MF. "

0
Wazza