私はかなり長い間log4jを使用していますが、通常はlog4j.xmlの上部でこれを使用します(おそらく他の多くのものと同じように、Googleによればこれはthe方法です):
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
明らかにこれは機能していますが、EclipseはXMLを記述するための状況依存ヘルプを提供していません。さらに、log4j.dtd
が見つからないという警告が常に表示されます。今、私はこれを修正する方法に興味があります。
私はいくつかのことを試しましたが、これらの作業は次のとおりです。
<!DOCTYPE log4j:configuration SYSTEM "jar:file:/path/.m2/repository/log4j/log4j/1.2.14/log4j-1.2.14.jar!/org/Apache/log4j/xml/log4j.dtd">
<!DOCTYPE log4j:configuration SYSTEM "http://logging.Apache.org/log4j/1.2/apidocs/org/Apache/log4j/xml/doc-files/log4j.dtd">
上からわかるように、Mavenを使用しています。したがって、私はこれを試しましたが、失敗します:
<!DOCTYPE log4j:configuration SYSTEM "jar:file:${M2_REPO}/log4j/log4j/1.2.14/log4j-1.2.14.jar!/org/Apache/log4j/xml/log4j.dtd">
Eclipseは通常、クラスパス変数の処理方法を知っていますが、なぜこれが機能しないのですか?参照は実行中に機能しないことは知っていますが、単純なlog4j.dtd
(私が間違っていなければ)も機能しないので、それは問題になりません。
誰もこれに光を当てることができますか?
私はこの質問に回答したことは知っていますが、少し異なる選択肢を提供したいと思います。
<!DOCTYPE log4j:configuration PUBLIC
"-//Apache//DTD LOG4J 1.2//EN" "http://logging.Apache.org/log4j/1.2/apidocs/org/Apache/log4j/xml/doc-files/log4j.dtd">
@ FrVaBeの応答 に似ていますが、プラス側では、Eclipseの追加の構成は必要ありません(つまり、プロジェクトを他の人と共有している場合、または大規模なチームがある場合、1つ少ない心配すること)。
ただし、マイナス面は、インターネット接続が必要になることを意味するということです(少なくとも1回だけの場合でも、開発中のある時点で)。
「設定-> XML-> XMLカタログ」で、log4j.dtdをユーザー固有のURI XMLカタログエントリとして追加してみてください。私が知っているように、これはEclipseが定義/検証ファイル(xsdなど)への参照を管理する場所です。ここでそれらを見つけることができれば、Eclipseはネイティブ(ウェブ)ロケーションでそれらにアクセスするためにインターネットアクセスを必要としません。
私はこれを(テストのために)やりましたが、Eclipseは文句を言いません:
Entry element: URI
Location: C:\Users\me\Desktop\log4j.dtd
URI: file:///C:/Users/me/Desktop/log4j.dtd
Key type: URI
Key: http://logging.Apache.org/log4j/1.2/apidocs/org/Apache/log4j/xml/doc-files/log4j.dtd
たぶん$ {M2_REPO}も動作する-これをチェックしなかった。
その後、log4j.xmlでネイティブURLを使用します
<!DOCTYPE log4j:configuration SYSTEM "http://logging.Apache.org/log4j/1.2/apidocs/org/Apache/log4j/xml/doc-files/log4j.dtd">
編集
上記のソリューションを使用しますが、質問に戻って、クラスパス変数 'Java Build Path'で使用できます ' と思います。なぜDOCTYPE定義内で動作するのですか? log4j.xmlファイルを「検証」(Eclipseコンテキストメニュー)すると、パスを解決できないという警告が表示されます。
classpath:org/Apache/log4j/xml/log4j.dtd
がうまくいくと思いますが、そのプロトコルもサポートされていません(検証エラーを参照)。私はそれが箱から出して動作しないことを恐れています。
そして、理解したように、SYSTEM "log4j.dtd"
表記はプレースホルダーではありません。これは、dtd(この場合)の横にあると予想されるドキュメントへの有効な参照です。
WebcontentにDTDフォルダーを追加し、その中にlog4j dtdファイルをコピーしました。それから私は怒鳴るように試しました。その働き
<!DOCTYPE log4j:configuration SYSTEM "<Path>/DTD/log4j.dtd">
ここでのパスとは、/projectname
のようなプロジェクトパスを意味します
FrVaBeの答えを試してみましたが、うまくいきませんでした。Keyの値を少し変更すると動作します。
「設定-> XML-> XMLカタログ」
Localization: C:\Users\me\Desktop\log4j.dtd
Key Type: URI
Key: -//Apache//DTD LOG4J 1.2//EN
@ Jack Leow は、PUBLIC IDで適切なアプローチを使用します。しかし、彼が指摘するように、ネットワーク接続が必要です。
私は組み合わせを好む:
Entry element: Public
Location: org\Apache\log4j\xml\log4j.dtd in jar file C:\Development\lib\external\Apache-log4j-1.2.17\log4j-1.2.17.jar
URI: jar:file:/C:/Development/lib/external/Apache-log4j-1.2.17/log4j-1.2.17.jar!/org/Apache/log4j/xml/log4j.dtd
Key type: Public ID
Key: -//Apache//DTD LOG4J 1.2//EN
これはローカルJARを参照し、完全なURLなしのDOCTYPE宣言をサポートします。
<!DOCTYPE log4j:configuration PUBLIC "-//Apache//DTD LOG4J 1.2//EN" "log4j.dtd">