我正在尝试运行' 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>
文件结构:
当我运行命令&#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;这将导致部署的应用程序出现问题。需要一个更优雅的解决方案。
答案 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文件夹中。然后你就会知道它应该作为资源提供。