Я использую log4j для довольно долгое время , и я обычно использую это в верхней части log4j.xml (вероятно , так же , как и многие другие , и в соответствии с Google это способ сделать это):
<!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
(если я не ошибаюсь), так что это не должно быть проблемой.
Кто-нибудь может пролить свет на это?
источник
Попробуйте добавить log4j.dtd в качестве записи каталога XML с URI для конкретного пользователя в разделе «Настройки -> XML -> Каталог XML». Насколько я знаю, это место, где eclipse управляет ссылками на файлы определения / проверки (например, xsd). Если их можно найти здесь, eclipse не нужен доступ в Интернет для доступа к ним в их родном (веб-) местоположении.
Я сделал это так (для теста), и eclipse не жалуется:
Может и $ {M2_REPO} работает - это не проверял.
После этого используйте собственный URL-адрес в своем log4j.xml
РЕДАКТИРОВАТЬ
Я бы пошел с указанным выше решением, но, возвращаясь к вашему вопросу, я думаю, что переменные пути к классам «можно использовать в пути сборки Java» . Почему они должны работать внутри определения DOCTYPE? «Подтвердите» (контекстное меню eclipse) файл log4j.xml, и вы получите предупреждение о том, что путь не может быть разрешен.
Я надеялся,
classpath:org/apache/log4j/xml/log4j.dtd
что у меня получится, но этот протокол также не поддерживается (см. Ошибку проверки). Боюсь, из коробки не получится.И, как я понял,
SYSTEM "log4j.dtd"
обозначение не заполнитель. Это действительная ссылка на документ, который, как ожидается, будет находиться рядом с dtd (в данном случае).источник
log4j.jar
целом. Я предполагаю, что "log4j.dtd" - это своего рода заполнитель, поскольку это такое общее название. - Да, копирование log4j.dtd рядом с XML было бы решением, но действительно ли это обычный способ сделать это?SYSTEM "log4j.dtd"
- это способ сделать это .Я добавил папку DTD в веб-контент, а затем скопировал в нее файл log4j dtd. затем я попробовал, как ниже. Это работает
Путь означает здесь путь проекта, например
/projectname
источник
Я попытался ответить FrVaBe, но у меня не получилось, и я немного изменил значение ключа, и он работает.
«Настройки -> XML -> Каталог XML»
источник
@Jack Leow использует хороший подход с PUBLIC ID. Тем не менее, как он указывает, для этого требуется подключение к сети.
Я предпочитаю сочетание:
Это ссылается на локальный JAR и поддерживает объявление DOCTYPE без полного URL.
источник
Обычно Eclipse ищет
log4j.dtd
в пути к классам и не находит его там и, следовательно, ошибки. Мы можем решить эту проблему, указав URL-адресlog4j.dtd
файла, как показано ниже.источник