2015-11-02 24 views
5

Sto cercando di leggere una risorsa MANIFEST.MF in un servlet Java. La mia situazione: ho una GUERRA (con il manifest che voglio leggere) all'interno di un EAR. Ci sono molti altri WAR e JAR nell'AER. Un percorso di classe è davvero lungo.Lettura propria MANIFEST.MF nel servlet Java

Ho provato diversi modi nel Web, incluso StackOverflow.

posso leggere tutti i file utilizzando manifest.mf

this.getClass().getClassLoader().getResources("META-INF/MANIFEST.MF"); 

e scorrere attraverso di loro. Tuttavia, non so quale sia il mio - non conosco nemmeno il titolo di implementazione poiché questo è generato da una pipe di costruzione. (Posso immaginare con la conoscenza del tubo di compilazione, quindi so che il manifesto corretta è lì. Tuttavia, non riesco a immaginare in un codice di produzione.)

Naturalmente,

this.getClass().getClassLoader().getResourceAsStream("META-INF/MANIFEST.MF"); 

restituisce una manifesta completamente sbagliato da qualche altro barattolo su un percorso di classe.

Ho anche provato

this.getServletContext().getResourceAsStream("META-INF/MANIFEST.MF"); 

ma restituisce un valore null.

Come accedere a un file MANIFEST.MF appartenente al WAR contenente un servlet attualmente in esecuzione?

+3

Quali attributi manifest hai intenzione di leggere? Molti di questi sono ottenibili con i metodi Java SE esistenti. – VGR

+1

VGR +1, ottenendo la versione ad esempio: String version = getClass(). GetPackage(). GetImplementationVersion(); – Rustam

+1

I suddetti commenti sono inapplicabili per manifest di WAR e quindi errati. – BalusC

risposta

3

Ho anche provato

this.getServletContext().getResourceAsStream("META-INF/MANIFEST.MF"); 

ma restituisce un valore null.

Questo percorso deve iniziare con / per rappresentare un percorso risorsa guerra assoluta.

this.getServletContext().getResourceAsStream("/META-INF/MANIFEST.MF"); 

Utilizzando ClassLoader#getResourceXxx() non ha senso come file manifest di guerra non si trova nel percorso di classe. Si trova in webroot, accanto a /WEB-INF e tutto. Pertanto, ServletContext#getResourceXxx() è l'unico modo.

+0

Questo è stato utile. Semplicemente non capisco come sia possibile leggere tutti i manifesti di this.getClass(). GetClassLoader(). GetResources ("META-INF/MANIFEST.MF"); non ha avuto esito negativo. – user1608790

+1

Prego. Quelli provengono da classpath non da webcontent. Si applicano altre regole. Vedi anche a.o. http://stackoverflow.com/questions/2161054/where-to-place-and-how-to-read-properties-files-in-a-jsp-servlet-web-application/ – BalusC