Eclipse: Référencement de log4j.dtd dans log4j.xml

J’utilise log4j depuis un bon moment maintenant et je l’utilise généralement en haut du fichier log4j.xml (probablement comme beaucoup d’autres et selon Google, c’est la manière de le faire):

 

Évidemment, cela fonctionne, mais Eclipse ne fournit pas son aide contextuelle pour écrire le XML et tout. En outre, il affiche toujours un avertissement indiquant qu’il ne trouve pas le log4j.dtd . Maintenant, je suis curieux de savoir comment résoudre ce problème.

J’ai essayé plusieurs choses et celles-ci fonctionnent:

   

Comme vous pouvez le voir ci-dessus, nous utilisons Maven. Par conséquent, j’ai essayé ceci, mais cela échoue:

  

Eclipse sait généralement comment gérer les variables classpath, mais pourquoi cela ne fonctionne-t-il pas? Je sais que la référence ne fonctionnera pas pendant l’exécution, mais un simple log4j.dtd (si je ne me trompe pas) ne devrait pas poser de problème.

Quelqu’un peut-il s’il vous plaît faire la lumière sur ceci?

Je sais que cette question a reçu une réponse, mais j’aimerais proposer une alternative légèrement différente:

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

Il est similaire à la réponse de @FrVaBe , mais du côté des avantages, il ne nécessite aucune autre configuration d’Eclipse (par exemple, si vous partagez votre projet avec d’autres personnes ou si vous avez une grande équipe, ne vous inquiétez pas).

L’inconvénient, c’est que je pense que cela signifie que vous aurez besoin d’une connexion Internet (du moins à un moment du développement, même si ce n’est qu’une seule fois).

Essayez d’append le fichier log4j.dtd en tant qu’entrée de catalogue XML d’URI spécifique à l’utilisateur dans “Préférences -> XML -> Catalogue XML”. Comme je le sais, c’est l’endroit où eclipse gère les références aux fichiers de définition / validation (comme xsd). S’ils peuvent être trouvés ici, eclipse n’a pas besoin d’un access Internet pour y accéder sur leur site (web) natif.

Je l’ai fait comme ça (pour tester) et eclipse ne se plaint pas:

 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 

Peut-être aussi que $ {M2_REPO} fonctionne – je ne l’ai pas vérifié.

Utilisez l’URL native dans votre log4j.xml après

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

MODIFIER

Je voudrais aller avec la solution ci-dessus, mais pour revenir à votre question, je pense que les variables de chemin de classe ‘peuvent être utilisées dans un Java Build Path’ . Pourquoi devraient-ils fonctionner dans une définition DOCTYPE? “Valider” (menu contextuel Eclipse) le fichier log4j.xml et vous serez averti que le chemin ne peut pas être résolu.

J’espérais que classpath:org/apache/log4j/xml/log4j.dtd ferait l’affaire mais ce protocole n’est pas non plus supporté (voir erreur de validation). Je crains que cela ne fonctionne pas de la boîte.

Et, si j’ai bien compris, la notation SYSTEM "log4j.dtd" n’est pas un espace réservé. C’est une référence valide à un document que l’on s’attend à trouver à côté du dtd (dans ce cas).

J’ai ajouté le dossier DTD dans webcontent, puis j’ai copié le fichier log4j dtd dans celui-ci. alors j’ai essayé comme ci-dessous. Ça marche

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

Chemin signifie ici le chemin du projet tel que /projectname

J’ai essayé avec la réponse de FrVaBe mais je n’ai pas travaillé pour moi et j’ai fait un petit changement dans la valeur de la clé et cela fonctionne.

“Préférences -> XML -> Catalogue XML”

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

@ Jack Leow utilise une bonne approche avec l’ID PUBLIC. Pourtant, comme il le fait remarquer, il nécessite une connexion réseau.

Je préfère une combinaison:

 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 

Cela fait référence à un fichier JAR local et prend en charge une déclaration DOCTYPE sans l’URL complète.

 < !DOCTYPE log4j:configuration PUBLIC "-//APACHE//DTD LOG4J 1.2//EN" "log4j.dtd"> 

En général, Eclipse recherche log4j.dtd dans classpath et il ne le trouve pas là et donc l’erreur. Nous pouvons résoudre ce problème en fournissant l’URL du fichier log4j.dtd comme ci-dessous.

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