2015-11-02 13 views
5

Ich versuche, eine eigene MANIFEST.MF-Ressource in einem Java-Servlet zu lesen. Meine Situation: Ich habe einen KRIEG (mit dem Manifest, das ich lesen möchte) in einem EAR. Es gibt mehrere andere WARs und JARs in der EAR. Ein Klassenpfad ist wirklich lang.Eigenen MANIFEST.MF in Java-Servlet lesen

Ich habe verschiedene Möglichkeiten im Web versucht, einschließlich StackOverflow.

Ich kann alle MANIFEST.MF Dateien lesen

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

und durchlaufen sie zu benutzen. Allerdings weiß ich nicht, welcher mir gehört - ich kenne nicht mal den Implementierungs-Titel, da dieser von einer Build-Pipe erzeugt wird. (Ich kann mit Kenntnis des Build-Rohres erraten, daher weiß ich, das richtige manifest ist. Allerdings kann ich nicht in einem Produktionscode erraten.)

Natürlich

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

gibt ein völlig falsches manifest aus einem anderen Glas auf einem Klassenpfad.

Ich habe auch versucht

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

aber es gibt eine Null.

Wie kann man auf eine Datei namens MANIFEST.MF zugreifen, die zum WAR gehört und ein laufendes Servlet enthält?

+3

Welche Manifestattribute möchten Sie lesen? Viele von ihnen sind mit bestehenden Java-SE-Methoden erhältlich. – VGR

+1

VGR +1, Version erhalten zum Beispiel: String version = getClass(). GetPackage(). GetImplementationVersion(); – Rustam

+1

Die obigen Kommentare gelten nicht für WARs eigenes Manifest und sind daher falsch. – BalusC

Antwort

3

Ich habe auch versucht

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

aber es gibt eine Null.

muß Dieser Weg mit / starten, um einen absoluten IST Ressourcenpfad darzustellen.

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

ClassLoader#getResourceXxx() Verwendung macht keinen Sinn, als IST eigene Manifest-Datei nicht in Classpath befindet. Es befindet sich in Webroot, neben /WEB-INF und alle. Daher ist ServletContext#getResourceXxx() der einzige Weg.

+0

Das war hilfreich. Ich verstehe einfach nicht, wie es möglich ist, dass alle Manifeste gelesen werden von this.getClass(). GetClassLoader(). GetResources ("META-INF/MANIFEST.MF"); scheiterte auch nicht. – user1608790

+1

Gern geschehen. Diese stammen vom Klassenpfad und nicht vom Webcontent. Andere Regeln gelten. Siehe auch a.o. http://stackoverflow.com/questions/2161054/where-to-place-and-how-to-read-properties-files-in-a-jsp-servlet-web-application/ – BalusC