2

我正在尝试使用加载“log4j.xml”的 java 代码运行“mvn test”。我收到文件未找到异常。能得到一些帮助会很棒。

我的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

当我运行命令“mvn test”时,我得到 log4j.xml 的文件未找到异常:

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

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

4

1 回答 1

-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 包,您应该查看 build 或 target 文件夹并看到 log4j.xml 已复制到 classes 文件夹。然后你就会知道它应该可以作为资源使用。

于 2013-10-23T17:23:48.590 回答