laden log4j.xml mit maven test

Ich versuche zu laufen 'mvn test" mit meinem java-code laden "log4j.xml'. Ich bin immer Datei nicht gefunden Ausnahme. Wäre toll, etwas Hilfe zu bekommen.

Mein java-code:

public class MyClass {
    static Logger logger = Logger.getLogger(MyClass.class);
    public boolean check(){
        try{
            DOMConfigurator.configure("log4j.xml");
            logger.info("into the method");
        }
        return true;
    }
}

Junit test case:

import static org.junit.Assert.*;

import org.junit.Test;

public class MyClassTests {

    @Test
    public void testCheck() {
        MyClass myc = new MyClass();
        assertEquals(true, myc.check()); 
    }
}

block pom.xml

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>2.15</version>
        <configuration>
            <includes>
                <include>**/*Tests.java</include>
                <include>log4j.xml</include>
            </includes>
            <argLine>-Xmx512m</argLine>
        </configuration>
        <inherited>true</inherited>
    </plugin>

Datei-Struktur:

  • pom.xml = */myproject/pom.xml
  • log4j.xml = */myproject/src/main/resources/log4j.xml
  • myclass.java = */myproject/src/main/java/MyClass.java
  • junit-test = */myproject/src/test/java/MyClassTests.java

Wenn ich den Befehl "mvn test", bekomme ich eine Datei nicht gefunden Ausnahme für log4j.xml:

java.io.FileNotFoundException:
*/myproject/log4j.xml (Keine solche Datei oder das
Verzeichnis)

Grundsätzlich der code ist auf der Suche nach log4j.xml in den root-Ordner des Projekts, anstatt in den /src/main/resources Ordner. Ich will nicht zu ändern Sie den code "DOMConfigurator.configure("/src/main/resources/log4j.xml");" Dadurch wird die Ausgabe in die bereitgestellte Anwendung. Brauche eine elegantere Lösung.

  • Der code unten, ist das Problem behoben. Diese Frage kann geschlossen werden: 'DOMConfigurator.konfigurieren(dies.getClass().getClassLoader().getResource("log4j.xml"));'
  • Das funktioniert aber auch da log4j.xml gelesen wird relativ zu einem root-Ressource, dann sollte es DomConfigurator.Konfigurator("/log4j.xml") sollte auch funktionieren, wenn log4j.xml in src/main/resources. DomConfigurator.Konfigurator("log4j.xml") versuchen, die Last aus dem gleichen Paket, das myClass befindet. Dies ist, wie URL-classloadern beheben Klassen/Ressourcen.
InformationsquelleAutor Srik | 2013-10-23
Schreibe einen Kommentar