Ich habe eine Webapp, die eine Manifest-Datei enthält, in der ich die aktuelle Version meiner Anwendung während einer Ameisen-Build-Aufgabe schreibe. Die Manifestdatei wird korrekt erstellt, aber wenn ich versuche, sie während der Laufzeit einzulesen, bekomme ich einige seltsame Nebenwirkungen. Mein Code für im Manifest zu lesen ist so etwas wie dieses:Wie lese ich die Manifestdatei für eine Webapp, die in Apache Tomcat ausgeführt wird?
InputStream manifestStream = Thread.currentThread()
.getContextClassLoader()
.getResourceAsStream("META-INFFFF/MANIFEST.MF");
try {
Manifest manifest = new Manifest(manifestStream);
Attributes attributes = manifest.getMainAttributes();
String impVersion = attributes.getValue("Implementation-Version");
mVersionString = impVersion;
}
catch(IOException ex) {
logger.warn("Error while reading version: " + ex.getMessage());
}
Als ich tomcat eclipse anhängen, ich sehe, dass der obige Code funktioniert, aber es scheint eine andere Manifest-Datei als das bekommen ich erwartet hatte, die Ich kann sagen, weil die Ameisenversion und der Build-Zeitstempel beide unterschiedlich sind. Dann lege ich "META-INFFFF" drin, und der obige Code funktioniert immer noch! Das bedeutet, dass ich ein anderes Manifest lese, nicht meins. Ich versuchte auch
this.getClass().getClassLoader().getResourceAsStream(...)
Aber das Ergebnis war das gleiche. Was ist der richtige Weg, um die Manifest-Datei aus einer Webapp in Tomcat zu lesen?
Bearbeiten: Danke für die Vorschläge so weit. Auch sollte ich beachten, dass ich bin läuft Tomcat Standalone; Ich starte es von der Befehlszeile aus und verknüpfe es dann mit der laufenden Instanz im Debugger von Eclipse. Das sollte keinen Unterschied machen, oder?
@ PascalThivents Antwort ist der richtige Weg dazu. Fügen Sie eine Ausnahmebehandlung für den Fall hinzu, dass Ihr MANIFEST nicht existiert (zB.IDE) und es sollte A1 sein. – jmelanson
Diese universelle Methode hat mir geholfen: [http://stackoverflow.com/a/29103019/3158918] – user3158918