我有一个 testng 类,它测试一个类,它反过来从classpath加载属性。当我运行maven install时,我收到错误提到找不到文件。它无法找到属性虽然我在src/test/resources
中有文件。如何解决这个问题?
java代码有一个构造函数,它试图加载属性文件Properties props = JobUtils .loadProperties("x.properties");
我的maven配置:
<plugin>
<groupId>org.apache.maven.plugins
<artifactId>maven-surefire-plugin
<version>2.5
<configuration>
<skipTests>false</skipTests>
</configuration>
</plugin>
使用:
<build>
<testResources>
<testResource>
<directory>src/test/resources</directory>
<filtering>false</filtering>
</testResource>
</testResources>
</build>
此外,我在x.properties
src/test/resource
堆栈跟踪运行TestSuite是:
java.io.FileNotFoundException: x.properties (The system cannot find the file specified)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.(FileInputStream.java:106)
at java.io.FileInputStream.(FileInputStream.java:66)
还要注意测试类我试图实例化这个java代码并测试它。
答案 0 :(得分:2)
执行Maven x.properties
阶段后,src/test/resources
目录中的target/test-classes
文件实际上被复制到process-test-resources
目录。因此,如果您希望应用程序能够找到它,则应使用以下文件路径:
Properties props = JobUtils .loadProperties("target/test-classes/x.properties");
但是我不认为这正是你想要的。我建议直接从CLASSPATH读取属性文件(不直接使用文件系统),使用如下代码:
InputStream is = getClass().getResourceAsStream("/x.properties");
Properties p = new Properties();
try {
p.load(is);
} catch (IOException e) {
e.printStackTrace();
} finally {
if (is != null) {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
使用此方法,您甚至可以从分发给客户的JAR文件中加载属性文件,也可以从某种启动脚本中添加到CLASSPATH的配置文件中加载属性文件。
答案 1 :(得分:1)
我遇到了无法找到文件的问题。但是,当我在命令行上运行mvn test时,我意识到maven发现了它的使用。只是我的Eclipse IDE告诉我它无法找到它。当我在IDE目录src / test / resources中更改为“源目录”时,我的IDE也很好。