0

配布するjarに含めたプロパティファイルがあります。jar 内にファイルを含めることを決定する前に、次のようにロードしていました

properties.load(new FileInputStream(configFileName));

しかし、ファイルがjar内に配置されると、これは機能しなくなったため、コードを次のように変更しました

properties.load(MyClass.class.getResourceAsStream(configFileName));

唯一の問題は、プロパティを使用する単体テストがあることです (静的に読み込まれるため、モックできません)。単体テストは jar が作成される前に実行されるため、現在はすべて失敗しています。プログラムが jar として実行される場合にのみ、jar に含まれるファイルを処理するエレガントな方法はありますか?

4

3 に答える 3

1

これを行う 1 つの方法は callgetResourceAsStream()で、null を返す場合は callnew FileInputStream()です。

しかし、より良い質問は、単体テストを実行するときにクラスパスにプロパティがないのはなぜですか? Maven のようなビルド ツールを使用している場合、これは自動的に行われます。そして、あなたが自分だと思っているものを実際に構築しているというより良い感覚を与えるでしょう.

于 2012-08-31T16:59:58.970 に答える
0

問題はおそらく、このファイルがクラスローダーから見えないことです..

私はこれを使うだろう

Classloader cl = getClass().getClassloader();
properties.load(cl.getResourceAsStream(configFileName))

このアプリがウェブアプリケーションの場合、クラスロードに注意してください..この場合、多くのクラスローダーがあります..リソースは、このクラスローダーに表示される必要があります..Tomcatのようなサーブレットコンテナでは、このように機能します

  Bootstrap
      |
   System
      |
   Common
    /     \
Webapp1   Webapp2 ... 

ここで詳細を読むことができます http://tomcat.apache.org/tomcat-6.0-doc/class-loader-howto.html

于 2012-09-01T15:44:38.997 に答える
0

プロパティ ファイルをソース コードと一緒に使用することに満足している場合は、次のことを試してください。

properties.load(getClass().getResourceAsStream("my.properties"));

この場合my.properties、ファイルはファイルと同じパッケージに存在する必要があり.javaます。

于 2012-08-31T17:07:12.953 に答える