Tengo una aplicación web que contiene un archivo de manifiesto, en el que escribo la versión actual de mi aplicación durante una tarea de compilación de ant. El archivo de manifiesto se crea correctamente, pero cuando trato de leerlo durante el tiempo de ejecución, obtengo algunos efectos secundarios extraños. Mi código para leer en el manifiesto es algo como esto:¿Cómo leo el archivo de manifiesto para una aplicación web que se ejecuta en 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());
}
Cuando ato Eclipse para Tomcat, veo que el código anterior funciona, pero parece que se pondrá un archivo de manifiesto diferente a la que yo esperaba, que Puedo decirlo porque la versión ant y la marca de tiempo de compilación son ambas diferentes. Luego, puse "META-INFFFF" allí, ¡y el código anterior aún funciona! Esto significa que estoy leyendo algún otro manifiesto, no el mío. También probé
this.getClass().getClassLoader().getResourceAsStream(...)
Pero el resultado fue el mismo. ¿Cuál es la forma correcta de leer el archivo de manifiesto desde dentro de una aplicación web que se ejecuta en tomcat?
Editar: Gracias por las sugerencias hasta ahora. Además, debería tener en cuenta que I am ejecutar tomcat independiente; Lo lanzo desde la línea de comando y luego lo conecto a la instancia en ejecución en el depurador de Eclipse. Eso no debería hacer la diferencia, ¿o sí?
@ La respuesta de PascalThivent es la manera correcta de hacerlo. Agregue un control de excepciones en caso de que su MANIFIESTO no exista (es decir ,:IDE) y debería ser A1. – jmelanson
Este método universal me ayudó: [http://stackoverflow.com/a/29103019/3158918] – user3158918