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

sjn*_*ngm 114 xml eclipse configuration log4j

我一直在使用log4j已经有一段时间了,我通常在log4j.xml的顶部使用它(可能就像许多其他人一样,根据谷歌这是这样做方式):

<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
Run Code Online (Sandbox Code Playgroud)

显然这是有效的,但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">
Run Code Online (Sandbox Code Playgroud)

从上面可以看出我们正在使用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">
Run Code Online (Sandbox Code Playgroud)

Eclipse通常知道如何处理类路径变量,但为什么这不起作用?我知道引用在运行时不起作用,但也不是简单的log4j.dtd(如果我没有错),所以这不应该是一个问题.

任何人都可以对此有所了解吗?

Jac*_*eow 172

我知道这个问题已得到解答,但我想提供一些略有不同的选择:

<!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">
Run Code Online (Sandbox Code Playgroud)

它类似于@ FrVaBe的响应,但从好的方面来说,不需要任何进一步的Eclipse配置(即,如果你与其他人共享你的项目,或者拥有一个庞大的团队,那么就不用担心了).

不利的一面是,我认为这意味着你需要一个互联网连接(至少在开发过程中的某个时刻,即使它只是一次).

  • 最近某个时候这已经停止了工作.如果你在浏览器中访问http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd,你会发现现在有一个xml错误 (7认同)

FrV*_*aBe 40

尝试在"首选项 - > 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
Run Code Online (Sandbox Code Playgroud)

也许$ {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">
Run Code Online (Sandbox Code Playgroud)

编辑

我会使用上面的解决方案,但回到你的问题,我认为类路径变量'可以在Java Build Path中使用'.他们为什么要在DOCTYPE定义中工作?"验证"(eclipse上下文菜单)log4j.xml文件,您将收到无法解析路径的警告.

我希望classpath:org/apache/log4j/xml/log4j.dtd能做到这一点,但该协议也不支持(参见验证错误).我担心它不会开箱即用.

而且,据我所知,SYSTEM "log4j.dtd"符号不是占位符.它是对预期在dtd旁边找到的文档的有效引用(在本例中).