加载maven-surefire-plugin的属性文件

时间:2011-08-20 09:15:23

标签: java maven

我有一个 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代码并测试它。

2 个答案:

答案 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也很好。