2015-11-02 11 views
5

Javaサーブレットで独自のMANIFEST.MFリソースを読み込もうとしています。私の状況:私は、EARの中にWARを持っています。 EARには他にもいくつかのWARとJARがあります。クラスパスは本当に長いです。JavaサーブレットでMANIFEST.MFを読み取る

私はStackOverflowを含むいくつかの方法をWebで見つけました。

私は

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

を使用して、すべてのMANIFEST.MFファイルを読み込み、それらを反復処理することができます。しかし、どちらが私のものかわかりません - これはビルドパイプによって生成されるため、Implementation-Titleでさえわかりません。 (私はしかし、私は、生産コードで推測することはできません。したがって、私は正しいマニフェストがあると知って、ビルドパイプの知識を推測することができます。)

をもちろん、

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

は完全に間違ってマニフェストを返します。クラスパス上の他のジャーから。

私も

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

をしようとしたが、それはNULLを返します。

現在実行中のサーブレットを含むWARに属するMANIFEST.MFファイルへのアクセス方法は?

+3

どのマニフェスト属性を読む予定ですか?それらの多くは既存のJava SEメソッドで取得できます。 – VGR

+1

VGR +1、バージョンの取得例:String version = getClass()。getPackage()。getImplementationVersion(); – Rustam

+1

上記のコメントは、WAR自身のマニフェストには適用できないため、間違っています。 – BalusC

答えて

3

私も

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

をしようとしたが、それはNULLを返します。

絶対パスのWARリソースパスを表すには、そのパスが/で始まる必要があります。

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

WAR独自のマニフェストファイルをクラスパスに配置されていないようClassLoader#getResourceXxx()を使用することは意味がありません。 Webルートにあり、/WEB-INFの横にあります。したがって、ServletContext#getResourceXxx()は唯一の方法です。

+0

これは役に立ちました。私はちょうどすべてのマニフェストを読むことが可能であることを理解していません this.getClass()。getClassLoader()。getResources( "META-INF/MANIFEST.MF"); も失敗しませんでした。 – user1608790

+1

ようこそ。それらはウェブコンテンツからではなくクラスパスから来ます。その他の規則が適用されます。 a.oを参照してください。 http://stackoverflow.com/questions/2161054/where-to-place-and-how-to-read-properties-files-in-a-jsp-servlet-web-application/ – BalusC