Ho una webapp che contiene un file manifest, in cui scrivo la versione corrente della mia applicazione durante un'attività di compilazione ant. Il file manifest è stato creato correttamente, ma quando provo a leggerlo durante il runtime, ottengo alcuni strani effetti collaterali. Il mio codice per la lettura nel manifesto è qualcosa di simile:Come faccio a leggere il file manifest per una webapp in esecuzione in apache tomcat?
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());
}
Quando attribuisco Eclipse per Tomcat, vedo che il codice precedente funziona, ma sembra per ottenere un file manifesto diverso da quello che mi aspettavo, che Posso dirlo perché la versione della formica e il timestamp della build sono entrambi diversi. Quindi, inserisco "META-INFFFF" e il codice sopra funziona ancora! Ciò significa che sto leggendo qualche altro manifesto, non il mio. Ho anche provato
this.getClass().getClassLoader().getResourceAsStream(...)
Ma il risultato è stato lo stesso. Qual è il modo corretto di leggere il file manifest dall'interno di una webapp in esecuzione in tomcat?
Modifica: Grazie per i suggerimenti finora. Inoltre, devo notare che I am running tomcat standalone; Lo avvio dalla riga di comando e quindi si collega all'istanza in esecuzione nel debugger di Eclipse. Questo non dovrebbe fare la differenza, dovrebbe?
La risposta di @ PascalThivent è la soluzione giusta. Aggiungi una gestione delle eccezioni nel caso in cui MANIFEST non esista (ie.IDE) e dovrebbe essere A1. – jmelanson
Questo metodo universale mi ha aiutato: [http://stackoverflow.com/a/29103019/3158918] – user3158918