2011-01-27 10 views
4

私はJavaアプリケーションを他のコンピュータに簡単にデプロイするための作業をしており、これを行うためのantスクリプトを作成しています。クラスパスからコンフィグレーションファイルをロードする

jarのマニフェストファイルに指定されているクラスパスにリストされているリソースを読み込めません。

フォルダ構造のようになります。

/MyProgram.jar 
/lib/<dependencies> 
/config/configuration.xml 

私は私の人生のためのクラスローダを使用してconfiguration.xmlファイルにアクセスすることはできません。すべての依存関係とともに、マニフェストファイルへのClass-Pathエントリに明示的にリストされています。以下のすべての値の文字列としてXMLNAMEで

this.xml = Thread.currentThread().getContextClassLoader() 
       .getResourceAsStream(xmlName); 

this.xml = this.getClass().getResourceAsStream(xmlName); 

は、私は次の多くの亜種を試してみた

"config/configuration.xml" 
"configuration.xml" 
"config.configuration.xml" 

これに関連して、私はまた、log4j.propertiesを持っていますconfigディレクトリ内のファイル。 log4jを取得するにはどうすればよいですか?他の参考文献によると、クラスパスに入る必要があり、それもjarのマニフェストファイルに明示的に指定されています。誰かが私を正しい方向に向けることができますか?

アップデート:ここで

はクラスパスから実際のエントリです:

Class-Path: <snip dependencies> config/configuration.xml config/log4j.properties 

答えて

12

クラスパスエントリは、個々のファイルではなく、ディレクトリまたはjarファイルである必要があります。個々の設定ファイルではなく、configディレクトリを指すようにクラスパスを変更してみてください。

this.xml = Thread.currentThread().getContextClassLoader() 
      .getResourceAsStream("config.xml"); 

さらに、設定ディレクトリをMyProgram.jarに含めるだけです。これにより、クラスパスに特別に追加する必要がなくなります。アプリケーションを起動するときは、log4j.configurationシステムプロパティを使用することができます

this.xml = Thread.currentThread().getContextClassLoader() 
      .getResourceAsStream("/config/configuration.xml"); 
+0

クラスパスエントリがフォルダになりました!これにより、log4jは設定ファイルを取得します。ありがとう! 私はそれをjarファイルにパッケージ化しますが、プログラムがラボコンピュータに置かれた後で構成を編集できるようにしたいと考えています。 – Collin

3

私の知る限りでは、のlog4j.xmlは、あなたのクラスパスのルートにする必要があります。..

とまた、以下のコードスクリプトで設定ファイルを読むことができます。 configディレクトリはクラスパスにある必要があります。

this.xml = this.getClass().getResourceAsStream("/config/configuration.xml"); 
+0

コンフィグレーションXMLには何の喜びもありません。クラスパスエントリ自体を質問に追加しましたが、正しくないのですか? – Collin

1

java -Dlog4j.configuration=config/log4j.properties MyApp 

は、 "デフォルトの初期化手順" の下http://logging.apache.org/log4j/1.2/manual.htmlを参照してください。

他の設定ファイルが選択されていないことについては、Manifest.mfファイルはどのように見えますか?あなたのManifest.mfファイルに

Class-Path: config/configuration.xml lib/yourLibOne.jar lib/blah.jar 

のようなものを使用していますか?log4jのについて

0

:あなたはそれがデフォルトと異なる設定ファイルを使用する場合は、URL、プロパティまたはファイル名を受け入れ、この静的メソッドの

org.apache.log4j.PropertyConfigurator.configure(...) 

バリアントを使用することができます。

XMLファイルの

org.apache.log4j.xml.DOMConfigurator 

もあります。

関連する問題