2012-02-10 20 views
0

まず、タイトルがわかりやすくない場合は申し訳ありませんが、そのような短い方法で説明するのは難しいです。Webアプリケーションで使用されているJARファイルの相対パス

プロパティファイルから読み込む必要があるJavaアプリケーション(Web以外)があります。このJavaアプリケーションは、JARファイルとしてエクスポートしてからWebアプリケーションで使用する必要がありますが、プロパティファイルはJARファイルには存在しません。それは次のようになります。myJavaApp.jarとしてエクスポートされますJavaアプリケーションをコーディングするとき、それは相対パスからconfig.propertiesファイルを読んでいましたので、

/webapps/MyWebApp/WEB-INF/myJavaApp.jar 
/webapps/MyWebApp/WEB-INF/config.properties 

だから、私はそれを行うことができません。絶対パスを入力すると正しく動作します:

properties.load(new FileInputStream("C:/Program Files/Apache Software Foundation/Tomcat 6.0/webapps/MyWebApp/WEB-INF/config.properties")); 

ただし、相対パスを使用しようとすると動作しません。私はここや他のウェブページとは違った解決策を試しましたが、どちらも働いていません。

ほとんど私がプロパティファイルを読んでいるクラスは静的です!

誰かがこれにいくつかの光を当てることができれば、それは大歓迎です。

ありがとうございました。あなたのJavaアプリケーションで

答えて

0

ファイルがclasspathにあることを確認した場合は、YourClassName.class.getResourceAsStream("/config.properties")でロードするだけです。それはそれを実装する最も簡単な方法でしょう。 Webアプリケーションの場合はファイルをWEB-INF/classes/に、スタンドアロンアプリケーションの場合はアプリケーションの起動時にクラスパスを設定するだけです。

+0

それは働いている!プロパティファイルをWebアプリケーションディレクトリの一番上に置くために '../../../ config/config.properties'を追加しました。ここでの問題は、設定ファイルの変更にTomcatを再起動して適用する必要があることです。(これを避ける方法はありますか?絶対パスを使用したときに設定ファイルを変更できる'ありがとう – Jinka

+0

相対パス '../../../ config/config.properties'を使いたくありません。クラスパス(またはサブディレクトリ)は、このリソースが生きるのに最適な場所です。 –

+0

Tomcatを再起動する必要があるのは、 'antiResourceLocking'を使用している可能性があります。 –

0

、あなたがして、現在のディレクトリの絶対パスを取得することができます:あなたは、同じディレクトリに存在するconfig.propertiesを持っていると仮定すると

System.getProperty("user.dir"); 

、このファイルの絶対パスを把握することができるはずですあなたのコードに絶対パスをハードコードすることなく、どこにでも展開することができます。

EDIT:

あなたのJavaアプリケーションは、実行可能JARの場合は、上記のコマンドは、それが直接呼び出された場合にのみ、正しいディレクトリを返します。このアプリケーションをWindowsプラットフォーム上の別のプロセスから間接的に呼び出すと、開始ディレクトリはwindows/system32になりますので、jarの呼び出し方法を分析する必要があります。後者の場合は、プロパティファイルのパスをjarに提供するために、Webアプリケーションに機能を追加することをお勧めします。

+0

Javaアプリケーションをテストするときに機能しましたが、一度JARとしてエクスポートされてWebアプリケーションに実行されると動作しません。とにかくありがとう! – Jinka

+0

をJARにエクスポートすると結果が変わることはありませんが、このJARを実行している場所からの参照が原因です。あなたの相対的なパスは、おそらくそのリファレンスからです。あなたのファイルはJARそのもの(新しいFileInputStream)の一部ではないので、 – Johnydep

+0

config.propertiesを考えることのできる任意のディレクトリに配置しようとしましたが、動作していませんでした。なぜか分からない、私は何か間違ったことをした:/ – Jinka