Dies ist als Antwort auf die near-universally accepted answer zu einem old question. Da die Antwort ziemlich alt ist (2009) und da es für mich nicht funktioniert, dachte ich, ich würde fragen, ob jemand weiß warum.Das Lesen meines eigenen Jar's Manifest Take 2
Mein Anwendungsfall ist die Entwicklung eines Gravel Plugins für den internen Gebrauch. Wann immer das Plugin angewendet wird, würde ich gerne in der Lage sein zu drucken, welche Version meines Plugins verwendet wird. Also schreibe ich die Version in das Manifest des Plugins, wenn das Plugin erstellt wird, und versuche, es aus dem Manifest zu lesen, wenn das Plugin angewendet wird. Dabei verwende ich die Technik in der verknüpften Antwort.
Ich schrieb einige Code in die Zeilen der Antwort, aber es funktioniert nicht. Ich habe eine Reihe von Debugging-Code, und ich kann sehen, dass der Code zuerst das Manifest vom JDK bereitgestellt findet sich:
Manifest-Version: 1.0
Created-By: 1.7.0_07 (Oracle Corporation)
Dann findet es mein Manifest, das eine die ich suche, aber wirft ein FileNotFoundException:
java.io.FileNotFoundException: Der JAR-Eintrag META-INF/MANIFEST.MF wurde nicht in {Pfad zu meinem Plugin-Jar in meinem lokalen Maven-Repository} gefunden. Wie konnte
Enumeration<URL> resources = getClass().getClassLoader()
.getResources("META-INF/MANIFEST.MF");
das Manifest finden und dann eine FileNotFoundException werfen, wenn sie mit ihm zu lesen versuchen:
Manifest manifest = new Manifest(resources.nextElement().openStream());
Das ist die Linie, wo die Ausnahme ausgelöst wird.
Kann jemand dieses seltsame Verhalten erklären oder sich eine andere, vielleicht neuere Art vorstellen, das Manifest zu lesen?
Dies läuft übrigens unter Eclipse, in Windows. Habe es noch nicht auf Linux versucht, wo es eigentlich funktionieren könnte, aber ich würde es gerne in beiden Fällen nutzen.
Welche Attribute des Manifests möchten Sie lesen? Viele versionsbezogene Manifestattribute sind als Methoden der Klasse [java.lang.Package] (http://docs.oracle.com/javase/8/docs/api/java/lang/Package.html) verfügbar. – VGR
Ja, ich habe gerade das Gleiche gefunden, danke. Siehe meine gerade gepostete Antwort. –