0

NetBeans から実行したときに log4j2.xml ファイルを見つけて使用する小さな Java プログラムを作成することに成功しました。コマンドラインで実行できるように、他のjarを含むjarファイルを作成しようとしています。Ant で jar ファイルを作成し、jar ターゲット内で「マニフェスト」を使用します。

ビルド後、「java -jar BimbleParser.jar」を実行すると、マニフェストの「Class-Path」に配置したすべての jar ファイルが検出され、プログラムが正しく実行されます。log4j2.xml ファイルごとに (.log ファイルに) ログを記録しないことを除いて。エラーを強制するように設定すると、いくつかの「エラー」がコマンドラインに記録されます。log4j2.xml ファイルが見つからないことを示すデフォルトの動作だと思います。

ビルド ファイルの「jar」ターゲットのマニフェストに設定されているように、log4j2.xml を含むディレクトリが CLASSPATH に見つからないことは確かです。

マニフェストを含む Ant タスクを次に示します。

   <target name="jar" description="Create jar file" depends="junit">
    <jar destfile="${project.name}.jar" duplicate="add" basedir="${classes_dir}"       filesetmanifest="skip" >
        <manifest>
            <attribute name="Build-Date" value="${TODAY} ${TSTAMP}"/>
            <attribute name="Main-Class" value="com.mumble.parsers.Bumble.BumbleParser"/>
            <attribute name="Class-Path" value="./CCom/config ./CCom/lib/CComCommons.jar ./CCom/lib/commons-configuration.jar ./CCom/lib/commons-lang.jar ./CCom/lib/log4j-api.jar ./CCom/lib/log4j-core.jar ./CCom/lib/commons-logging.jar ./CCom/lib/commons.lang3.jar"/>
        </manifest>
    </jar>
</target>

log4j2.xml は、'./CCom/config' として最初のクラスパス エントリにあり、他のすべての jar ファイルは私のプログラムによって検出され、使用されます。私は何を間違っていますか?

おそらく、この「java -jar BimbleParser.jar」シナリオでクラスパスを介して log4j2.xml ファイルを表示するための代替ソリューションはありますか?

ご協力いただきありがとうございます

4

1 に答える 1

0

自動設定にはまだバグがあると思います。回避策として、これを使用してみてください (log2j.xml ファイルへのパスを修正した後):

URI configuration = MyClass.class.getResource("/<path>/log4j2.xml").toURI();
Configurator.initialize("config", null, configuration);

例に基づく: https://svn.apache.org/repos/asf/logging/log4j/log4j2/trunk/core/src/test/java/org/apache/logging/log4j/FormatterLoggerManualExample.java

于 2013-04-06T14:50:28.403 に答える