JUnit + Maven:访问$ {project.build.directory}值

时间:2011-02-09 17:41:54

标签: java maven junit

在我的单元测试中,我想在$ {project.build.directory}中创建一个tmp目录。如何在单元测试中访问$ {project.build.directory}的值?

我能想到的一种方法是在测试资源中提供过滤后的属性文件,这样可以保存该值。 (我还没有尝试,但我认为这应该有效。)

是否有直接访问/传递此属性值的方法?

此致 弗洛里安

3 个答案:

答案 0 :(得分:17)

我之前使用过这样的东西并取得了一些成功。即使不使用Maven,单元测试仍将运行,目标目录仍将相对于运行测试的cwd创建两个目录。

public File targetDir(){
  String relPath = getClass().getProtectionDomain().getCodeSource().getLocation().getFile();
  File targetDir = new File(relPath+"../../target");
  if(!targetDir.exists()) {
    targetDir.mkdir();
  }
  return targetDir;
}

答案 1 :(得分:13)

如果您按照http://maven.apache.org/plugins/maven-surefire-plugin/examples/system-properties.html中的说明配置surefire-plugin,我认为使用系统属性非常简单。即便是这样的例子也直接回答了你的问题:

<project>
  [...]
  <build>
    <plugins>
      <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-surefire-plugin</artifactId>
         <version>2.9</version>
         <configuration>
           <systemPropertyVariables>
             <propertyName>propertyValue</propertyName>
             <buildDirectory>${project.build.directory}</buildDirectory>
             [...]
           </systemPropertyVariables>
         </configuration>
      </plugin>
    </plugins>
  </build>
  [...]
</project>

答案 2 :(得分:5)

请记住,您的单元测试不必从Maven surefire插件执行,因此${project.build.directory}属性可能不可用。为了使您的测试更具可移植性,我建议您使用File.createTempFile()