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