Java JUnit+;Maven:访问${project.build.directory}值
在单元测试中,我想在${project.build.directory}内创建一个tmp目录。如何在单元测试中访问${project.build.directory}的值 我可以想到的一种方法是在测试资源中提供一个过滤属性文件,该文件保存该值。(我还没试过,但我觉得应该行得通。)Java JUnit+;Maven:访问${project.build.directory}值,java,maven,junit,Java,Maven,Junit,在单元测试中,我想在${project.build.directory}内创建一个tmp目录。如何在单元测试中访问${project.build.directory}的值 我可以想到的一种方法是在测试资源中提供一个过滤属性文件,该文件保存该值。(我还没试过,但我觉得应该行得通。) 有没有直接的方法来访问/传递此属性值?请记住,您的单元测试不必从Maven surefire插件执行,因此${project.build.directory}属性可能不可用。为了使您的测试更具可移植性,我建议您使用Fi
有没有直接的方法来访问/传递此属性值?请记住,您的单元测试不必从Maven surefire插件执行,因此
${project.build.directory}
属性可能不可用。为了使您的测试更具可移植性,我建议您使用File.createTempFile()
如果您按照此处所述配置surefire插件,那么使用系统属性是非常简单的。甚至这里的例子也直接回答了你的问题:
<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>
[...]
org.apache.maven.plugins
maven surefire插件
2.9
财产价值
${project.build.directory}
[...]
[...]
我以前曾成功地使用过类似的方法。即使不使用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;
}
事实上,这就是我们目前所做的,我想改变这一点。我们遇到了一个问题,Hudson上的tmp目录被填满,直到磁盘空间用完。我们正在研究几个选项,一个是将目标目录中的tmp目录作为参数传递给File.createTempFile()。像这样,“mvn clean”将清理所有内容。此外,由于这是一个Maven项目,我认为测试将只使用Maven或支持Maven的IDE运行(此处:Eclipse)。我有另一个反对的理由-我们在Mac和Windows上使用TestContainers时遇到问题-临时文件无法绑定到docker容器中。可能我们可以配置设置系统属性,但不知何故,我不喜欢通过系统属性传递内容的想法。另一方面,您可以说这是特定于环境的(至少是绝对路径)。您认为呢?讨论稍微晚了一点,但是
relPath
并不等于src/main/java
,因此您肯定需要使用。/../target
?