comment vérifier la version du fichier jar?

Je travaille actuellement sur une application J2ME Polish, tout en l’améliorant. Je rencontre des difficultés pour obtenir la version exacte du fichier jar. Est-il possible de trouver la version du fichier jar pour les importations effectuées dans la classe? Je veux dire si vous avez quelque chose, importez xyz; pouvons-nous connaître la version du paquet jar xy?

Décompressez le fichier JAR et recherchez le fichier manifeste ( META-INF\MANIFEST.MF ). Le fichier manifeste du fichier JAR peut contenir un numéro de version (mais pas toujours une version est spécifiée).

Vous devez le décompresser et vérifier son fichier META-INF/MANIFEST.MF , par exemple

 unzip -p file.jar | head 

ou plus spécifique:

 unzip -p file.jar META-INF/MANIFEST.MF 

Juste pour développer les réponses ci-dessus, à l’intérieur du fichier META-INF / MANIFEST.MF dans le JAR, vous verrez probablement une ligne: Manifest-Version: 1.0 ← Ce n’est PAS le numéro de version de JAR!

Vous devez rechercher la version de Implementation-Version qui, si elle est présente, est une chaîne de texte libre, qui dépend entièrement de l’auteur du fichier JAR. Voir aussi la documentation Oracle et la version de Package Version

Juste pour compléter la réponse ci-dessus.

Le fichier manifeste se trouve dans le fichier jar du chemin META-INF\MANIFEST.MF .

Vous pouvez examiner le contenu de jar dans n’importe quel archiveur prenant en charge zip.

Chaque version de jar a une sum de contrôle unique. Vous pouvez calculer la sum de contrôle de votre jar (qui ne contient aucune information de version) et la comparer avec les différentes versions du fichier jar. Nous pouvons également rechercher un pot en utilisant la sum de contrôle.

Référez-vous à cette Question pour calculer le total de contrôle: Quelle est la meilleure façon de calculer une sum de contrôle pour un fichier se trouvant sur ma machine?

Ce programme simple listera tous les cas pour la version de jar à savoir

  • Version trouvée dans le fichier manifeste
  • Pas de version trouvée dans Manifest et même de nom de jar
  • Fichier manifeste introuvable

     Map jarsWithVersionFound = new LinkedHashMap(); List jarsWithNoManifest = new LinkedList(); List jarsWithNoVersionFound = new LinkedList(); //loop through the files in lib folder //pick a jar one by one and getVersion() //print in console..save to file(?)..maybe later File[] files = new File("path_to_jar_folder").listFiles(); for(File file : files) { Ssortingng fileName = file.getName(); try { Ssortingng jarVersion = new Jar(file).getVersion(); if(jarVersion == null) jarsWithNoVersionFound.add(fileName); else jarsWithVersionFound.put(fileName, jarVersion); } catch(Exception ex) { jarsWithNoManifest.add(fileName); } } System.out.println("******* JARs with versions found *******"); for(Entry jarName : jarsWithVersionFound.entrySet()) System.out.println(jarName.getKey() + " : " + jarName.getValue()); System.out.println("\n \n ******* JARs with no versions found *******"); for(Ssortingng jarName : jarsWithNoVersionFound) System.out.println(jarName); System.out.println("\n \n ******* JARs with no manifest found *******"); for(Ssortingng jarName : jarsWithNoManifest) System.out.println(jarName); 

Il utilise le javaxt-core jar qui peut être téléchargé depuis http://www.javaxt.com/downloads/

Fondamentalement, vous devez utiliser la classe java.lang.Package qui utilise le classloader pour vous donner des informations sur vos classes.

Exemple:

 Ssortingng.class.getPackage().getImplementationVersion(); Package.getPackage(this).getImplementationVersion(); Package.getPackage("java.lang.Ssortingng").getImplementationVersion(); 

Je pense que logback est connu pour utiliser cette fonctionnalité pour tracer le nom JAR / version de chaque classe dans ses stacktraces produites.

voir aussi http://docs.oracle.com/javase/8/docs/technotes/guides/versioning/spec/versioning2.html#wp90779

Je suis en retard mais vous pouvez essayer les deux méthodes suivantes

en utilisant ces classes nécessaires

 import java.util.jar.Atsortingbutes; import java.util.jar.Manifest; 

Ces méthodes me permettent d’accéder aux atsortingbuts jar. J’aime être rétrocompatible et utiliser les dernières nouveautés. Donc j’ai utilisé ça

 public Atsortingbutes detectClassBuildInfoAtsortingbutes(Class sourceClass) throws MalformedURLException, IOException { Ssortingng className = sourceClass.getSimpleName() + ".class"; Ssortingng classPath = sourceClass.getResource(className).toSsortingng(); if (!classPath.startsWith("jar")) { // Class not from JAR return null; } Ssortingng manifestPath = classPath.subssortingng(0, classPath.lastIndexOf("!") + 1) + "/META-INF/MANIFEST.MF"; Manifest manifest = new Manifest(new URL(manifestPath).openStream()); return manifest.getEnsortinges().get("Build-Info"); } public Ssortingng resortingeveClassInfoAtsortingbute(Class sourceClass, Ssortingng atsortingbuteName) throws MalformedURLException, IOException { Atsortingbutes version_attr = detectClassBuildInfoAtsortingbutes(sourceClass); Ssortingng atsortingbute = version_attr.getValue(atsortingbuteName); return atsortingbute; } 

Cela fonctionne bien lorsque vous utilisez maven et que vous avez besoin de détails sur les classes connues. J’espère que cela t’aides.

Il peut être vérifié avec une commande java -jar jarname