Eclipse:在log4j.xml中引用log4j.dtd

我已经使用了log4j很长一段时间了,我通常在log4j.xml的顶部使用它(可能和许多其他的一样,根据Google的说法,这是可以做到的):

<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> 

很明显,这是行得通的,但是Eclipse并没有为编写XML和所有的东西提供上下文相关的帮助。 此外,它总是显示一个警告,它没有findlog4j.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通常知道如何处理类pathvariables,但是为什么这不起作用呢? 我知道引用在运行时不起作用,但也不是一个简单的log4j.dtd (如果我没有错),所以不应该是一个问题。

任何人都可以请摆脱这个光?

我知道这个问题已经得到解答,但我想提供一个稍微不同的select:

 <!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的回应类似,但从另一方面来说,不需要任何进一步的Eclipseconfiguration(即,如果您与其他人共享您的项目,或者拥有一个庞大的团队,则不必担心)。

但是,我认为这意味着你需要一个互联网连接(至less在开发过程中的某个时候,即使只是一次)。

尝试在“首选项 – > XML – > XML目录”中将log4j.dtd添加为用户特定URI XML目录条目。 据我所知,这是eclipsepipe理对定义/validation文件(如xsd)的引用的地方。 如果他们可以在这里find日食需要互联网访问,以访问他们的本地(networking)的位置。

我这样做(testing)和日食不抱怨:

 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"> 

编辑

我会去上面的解决scheme,但回到你的问题,我认为类pathvariables可以在Java构buildpath中使用 。 为什么他们应该在DOCTYPE定义中工作? “validation”(eclipse上下文菜单)log4j.xml文件,你会得到一个警告,path无法parsing。

我希望classpath:org/apache/log4j/xml/log4j.dtd会做的伎俩,但该协议也不支持(见validation错误)。 恐怕它不会开箱即用。

而且,据我SYSTEM "log4j.dtd"SYSTEM "log4j.dtd"符号是没有占位符。 这是一个有效的参考文件,预计将被发现旁边的dtd(在这种情况下)。

我在webcontent中添加了DTD文件夹,然后在那里复制了log4j dtd文件。 然后我试图像波纹pipe。 它的工作

 <!DOCTYPE log4j:configuration SYSTEM "<Path>/DTD/log4j.dtd"> 

path在这里意味着像/projectname这样的项目path

我曾尝试与FrVaBe的答案,但没有为我工作,我做了一个小键盘值的变化,它的作品。

“首选项 – > XML – > XML目录”

 Localization: C:\Users\me\Desktop\log4j.dtd Key Type: URI Key: -//APACHE//DTD LOG4J 1.2//EN 

@Jack Leow在PUBLIC ID中使用了一个很好的方法。 然而,正如他指出的那样,这需要networking连接。

我更喜欢组合:

 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"> 

通常,Eclipse在类path中查找log4j.dtd ,并且在那里找不到它,因此出现错误。 我们可以通过提供像下面这样的log4j.dtd文件的URL来解决这个问题。

 <!DOCTYPE log4j:configuration SYSTEM "http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd">