Eclipse: riferimento a log4j.dtd in log4j.xml

Sto usando log4j da un po ‘di tempo e di solito uso questo nella parte superiore del log4j.xml (probabilmente proprio come molti altri e secondo Google questo è il modo di farlo):

 

Ovviamente funziona, tuttavia Eclipse non fornisce il suo aiuto sensibile al contesto per scrivere l’XML e tutto. Inoltre, mostra sempre un avvertimento che non trova log4j.dtd . Ora sono curioso di come sistemarlo.

Ho provato alcune cose e questi funzionano:

   

Come puoi vedere dall’alto, stiamo usando Maven. Pertanto, ho provato questo, ma non riesce:

  

Eclipse di solito sa come gestire le variabili del classpath, ma perché non funziona? So che il riferimento non funzionerà durante il runtime, ma nemmeno un semplice log4j.dtd (se non sbaglio), quindi non dovrebbe essere un problema.

Qualcuno può per favore far luce su questo?

So che questa domanda ha avuto risposta, ma mi piacerebbe fornire la mia alternativa leggermente diversa:

  

È simile alla risposta di @ FrVaBe , ma sul lato positivo, non richiede alcuna ulteriore configurazione di Eclipse (cioè, se condividi il tuo progetto con altri, o hai una grande squadra, è una cosa in meno di cui preoccuparsi).

Il lato negativo, però, è che credo che significhi che avrai bisogno di una connessione Internet (almeno ad un certo punto durante lo sviluppo, anche se è solo una volta).

Prova ad aggiungere log4j.dtd come voce di catalogo XML URI specifico per utente in “Preferenze -> XML -> Catalogo XML”. Come so, questo è il posto in cui eclipse gestisce i riferimenti ai file di definizione / convalida (come xsd). Se possono essere trovati qui eclipse non ha bisogno di accesso a internet per accedervi nella loro posizione nativa (web).

L’ho fatto così (per il test) ed eclipse non si lamenta:

 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 

Forse anche $ {M2_REPO} funziona – non l’ho verificato.

Successivamente, utilizzare l’URL nativo nel file log4j.xml

  

MODIFICARE

Vorrei andare con la soluzione di cui sopra, ma per tornare alla tua domanda, penso che le variabili del percorso di class ‘possono essere utilizzate in un percorso di costruzione Java’ . Perché dovrebbero funzionare all’interno di una definizione DOCTYPE? “Convalida” (menu di scelta rapida di Eclipse) il file log4j.xml e riceverai un avviso che il percorso non può essere risolto.

Spero che classpath:org/apache/log4j/xml/log4j.dtd faccia il trucco, ma anche quel protocollo non è supportato (vedi errore di validazione). Temo che non funzionerà fuori dalla scatola.

E, come ho capito, la notazione SYSTEM "log4j.dtd" non è un segnaposto. È un riferimento valido a un documento che dovrebbe essere trovato accanto al dtd (in questo caso).

Ho aggiunto la cartella DTD in webcontent e poi ho copiato il file dtd log4j in quello. poi ho provato a urlare. Sta funzionando

 /DTD/log4j.dtd"> 

Percorso indica qui il percorso del progetto come /projectname progetto

Ho provato con la risposta di FrVaBe ma non ha funzionato per me e ho apportato una piccola modifica al valore Key e funziona.

“Preferenze -> XML -> Catalogo XML”

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

@ Jack Leow utilizza un buon approccio con l’ID PUBBLICO. Tuttavia, come sottolinea, richiede una connessione di rete.

Preferisco una combinazione:

 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 

Questo fa riferimento a un JAR locale e supporta una dichiarazione DOCTYPE senza l’URL completo.

  

Di solito, Eclipse cerca log4j.dtd in classpath e non lo trova lì e quindi l’errore. Siamo in grado di risolvere questo problema fornendo l’URL per il file log4j.dtd come di seguito.