2

ロギングの目的で log4j を使用しています。すべてを構成するために、jar ファイルの外部にある log4j.xml を作成しました。これはうまく機能しますが、jar ファイルが log4j.xml と同じディレクトリから実行されない場合に問題が発生します。

例: jar ファイルは /opt/myapp/test.jar にあります

user@host:/opt/myapp$ java -jar test.jar

うまくいきますが、これを試してみると:

user@host:~$ java -jar /opt/myapp/test.jar

log4j.xml が見つからないというエラーが表示されます。これは、現在の作業ディレクトリで探しているためです。

アプリケーションで使用するプロパティ ファイルもあります。このファイルは、jar ファイルがある config/ ディレクトリにあるため、この例では /opt/myapp/config です。構成ファイルをロードしようとすると、上記と同じ問題が発生します。

jarファイルがあるディレクトリからJavaにファイルをロードさせるにはどうすればよいですか(jarがどこから実行されても)。

おそらく非常に簡単なことですが、理解できません:(

4

5 に答える 5

1

コマンド ライン引数 -Dlog4j.configuration=/path/to/file を使用してファイルを渡す必要があります。

さらにオプションが必要な場合は、マニュアルを確認してください。

于 2012-05-14T15:08:51.920 に答える
0

これを行う最も信頼できる方法は、特定のクラスのバイト コードがどこから来たのかを JVM に問い合わせることです。

このスニペットについては、 http://www.exampledepot.com/egs/java.lang/ClassOrigin.htmlを参照してください。

// Get the location of this class
Class cls = this.getClass();
ProtectionDomain pDomain = cls.getProtectionDomain();
CodeSource cSource = pDomain.getCodeSource();
URL loc = cSource.getLocation();  // file:/c:/almanac14/examples/

JAR 内からロードする場合は、もう少し後処理を行う必要があります。

于 2012-05-14T15:12:00.917 に答える
0

Class-FileからProtectionDomainを見てみましょう

于 2012-05-14T15:12:49.130 に答える
0

試す:

java cp /opt/myapp/someohter.jar -jar /opt/myapp/test.jar

プロパティを使用して、設定ファイルを探す場所、リソースなどを指定します(Pauloが指摘したように)。

通常、そのようなファイルを jar.file の近くに置いて、開始場所に応じて実行することはお勧めできません。多くの場合、アプリケーションがインストールされているディレクトリ (jar) はユーザーに対して書き込み保護されていますが、構成ファイルは編集可能になっています。

于 2012-05-14T15:13:54.153 に答える
0
  1. log4j システム プロパティを使用して指定し、コマンドの「-jar」部分の前にこれを追加します: -Dlog4j.configuration=/opt/myapp/log4j.xml

  2. ディレクトリをクラスパスに追加し、これをコマンドの「-jar」部分の前に追加します。

    -cp /opt/myapp/

  3. コードで log4j.xml ファイルを手動で指定し、それを jar ファイルに対して参照することができます。

    文字列パス = ... ; PropertyConfigurator.configure(パス);

于 2012-05-14T15:16:21.593 に答える