1

Eclipse Indigo でプログラムを開発し、テストしました。実行時にプロパティファイルを見つけるのに問題はありません。Eclipse エクスポートを使用して実行可能な jar を作成しました。プログラムが jar から実行されている場合、プログラムはプロパティ ファイルを見つけることができません。プロパティ ファイルは jar ファイルではなく、jar ファイルがデプロイされているディレクトリのサブディレクトリにあります。前述のように、このディレクトリは Eclipse 実行構成のクラスパスにあります。

C:/myApp/myApp.jar C:/myApp/properties/myApp.properties

props.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("myApp.properties"));

Jar マニフェストを編集して、config ディレクトリをクラスパスに配置するだけでよいですか?

4

2 に答える 2

0

はい。jar が配置されているディレクトリに相対的な config ディレクトリのパスを指定してください。上記で、config ディレクトリは jar の場所のサブディレクトリであると述べたので、これはおそらく単に

<configDir>

<configDir>、構成ディレクトリ名です。

また、プロパティ ファイル名にスラッシュを追加して、ルックアップに絶対リソース名を使用する必要があります。

props.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("/myApp.properties"));

これは、指定した相対名にクラスのパッケージ パスが追加されるためです。これは望ましくありません。

contextClassLoader を使用する必要がある特定の理由はありますか? より簡単な呼び出しは、ルックアップを含むクラスの classLoader を使用することです。また、クラスはその classLoader に委譲できるため、次のように簡単に言えます。

props.load(getClass().getResourceAsStream("/myApp.properties"));

最後に、プロパティー・ファイルを jar 自体に入れることを検討しましたか? まったく変わらない場合は、これがより良いオプションです。その場合、classPath を指定する必要はありません。必要に応じて、 jarのサブディレクトリに配置することもできますが、検索したリソース パスを変更して、絶対リソース名を再度使用する必要があることに注意してください。

絶対および相対リソース名に関する情報を次に示します。

http://docs.oracle.com/javase/1.5.0/docs/guide/lang/resources.html

お役に立てれば!

于 2013-09-17T21:26:42.813 に答える
0
properties.load(this.getClass().getResourceAsStream(configFileSrc));

これはうまくいくはずです。

私の場合、 configFileSrc = "/apiconfig/appconfig.properties"

ここに画像の説明を入力

ビルド パスにstaticresources dirを追加する必要がありました。

ありがとう

于 2013-09-17T20:57:46.433 に答える