2016-09-08 8 views
0

から.propertiesファイルをロードすることはできません。だから、私のプロジェクトの構造は、次のようなものです:のJava Webアプリケーションは、私はMavenのマルチモジュールに基づいてWebアプリケーションを構築してい瓶

/module1 
    /src/main/java 
     package/Module1.java 
    /src/main/resources 
     conf/i18n_en.properties 
/webapp 
    /src/main/java 
     package/Web.java 
    /src/main/resources 
     conf/i18n_en.properties 
    /src/main/webapp 

私はすべてのモジュールでI18Nについて異なる特性(「i18n_en.properties」)を持って、私はプロパティがコードでファイルをロードし、情報を取得します。単体テストでうまく走っているようです。

private ResourceBundle rb; 
String filename = BASE_NAME + "_" + LANG + ".properties"; 
InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream(filename); 
     if(in == null) { 
      in = c.getResourceAsStream(filename); 
     } 
     if (in == null) { 
      in = c.getClassLoader().getResourceAsStream(filename); 
     } 

     if (in != null) { 
       rb = new PropertyResourceBundle(in); 
     } 

しかし、私がIDEAを使ってtomcatを起動したとき、プログラムはwebappでプロパティをロードするだけです!ちょうど "Module1"のプロパティを見つけることができません!

は、私はそれが中わたjarファイルからロードする性質の問題だと思います。デプロイされたディレクトリの場合、次のようになります。

/WEB-INF 
    /classes 
    /conf/i18n_en.properties (from webapp) 
    /lib 
    /Module1.jar (has it's own properties in it) 

私は本当に混乱しました。私は長い間、すべてのものを検索し、私はいくつかの類似点を見つけましたが、私は問題を解決できません。私は彼らが言ったことをやったと思います。問題がどこにあるか私にはわからないJava WebApp: Loading resource from .jar located in WEB-INF

、プロパティインナーjarファイルをロードするにはいくつかの方法が存在しなければなりません。誰もが、私を助けてください、jarファイルでは非常に〜

+0

あなたのBASE_NAME変数の値は何ですか? –

+0

あなたがBASE_NAME –

+0

前に「/」を追加する必要があるはい、私はあなたが言ったことを試してみました。 "/ conf/i18n_properties"、 "conf/i18n_properties"のようなものです。それは、それが瓶にパッケージ化されている場合は、ファイルを見つけることができません。@ JekinKalariya – Alvin

答えて

0

ありがとう何かを知っている、あなたは、要素を見つけるために、クラスローダ()メソッドを使用することはできません。
利用できる:

try { 
     URL url2 = new URL(this.getClass().getProtectionDomain().getCodeSource().getLocation().toURI().toString()+your path to file in structre); 
     InputStream in = url2.openStream(); 
} catch (URISyntaxException ex) { 
     Logger.getLogger(PrepareGUI.class.getName()).log(Level.SEVERE, null, ex); 
} 
+0

ありがとうございます。あなたがしたいのは、jarファイルを見つけることができるURLを構築することです。私はそれを試して、それは本当に仕事です!しかし、私は次のコードを使用して少し違いがあります: '新しいURL(" jar: "+ c.getProtectionDomain()。getCodeSource()。getLocation()。toString()+"! "+ filename);' I jarの特定のURLフォーマットが 'Spring'によって認識されています。 – Alvin

+0

私は本当に 'ClassLoader.getResourceAsStream(...)'がjarファイルを見つけることができないのか知りたいです。私はインターネット上で多くの答えがアドバイスをしたのを見た。なぜ知っていますか?それとも私は何か悪いことをするのですか? – Alvin

+0

jarファイルを前に読みました。その記事では、あなたのリソースがJARファイルにあるとき、それはもはやファイルではないと言います。ファイルは、ファイルシステム上の物理的なファイルだけです。したがって、ClassLoader.getResourceAsStream(...)を使用してjarファイルを検索することはできません。 – Numb

関連する問題