使用maven测试加载log4j.xml

时间:2013-10-23 17:12:49

标签: java maven junit log4j

我正在尝试运行' mvn test'用我的java代码加载' log4j.xml'。我收到文件未找到异常。很高兴得到一些帮助。

我的java代码:

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测试用例:

import static org.junit.Assert.*;

import org.junit.Test;

public class MyClassTests {

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

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>

文件结构:

  • 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

当我运行命令&#34; mvn test&#34;时,我得到log4j.xml的文件未找到异常:

  

java.io.FileNotFoundException:   * / myproject / log4j.xml(没有这样的文件或   目录)

基本上,代码在项目的根文件夹中而不是在/ src / main / resources文件夹中查找log4j.xml。我不想将代码更改为&#34; DOMConfigurator.configure(&#34; /src/main/resources/log4j.xml");&#34;这将导致部署的应用程序出现问题。需要一个更优雅的解决方案。

1 个答案:

答案 0 :(得分:-1)

我看不到您的POM,但您的构建声明中应该有一个资源部分,以确保src / main / resources可用作类资源。

    <build>
    <outputDirectory>build/maven/${artifactId}/target/classes</outputDirectory>

<resources>

            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
            </resource>
        </resources>
</build>

然后DOMConfigurator应该能够将log4j.xml定位为类资源。如果在项目上运行maven包,则应查看构建或目标文件夹,并查看log4j.xml是否已复制到classes文件夹中。然后你就会知道它应该作为资源提供。