我有一个在maven的帮助下开发的java项目。该项目的一部分是单元测试。我计划将unittests生成的所有临时文件放入maven的目标目录。这可能是一个好主意,因为如果出于某种原因,单元测试不会删除临时文件,则可以清除目标目录,并且所有临时文件仍然位于文件系统中。所以我找到了maven资源插件的filtering函数,并想知道是否有可能为我的用例实例化它。我的计划是在属性文件中有一个像这样的条目
targetdir = ${project.build.directory}
它应该为我提供一个显示mavens target-directory位置的属性。现在,caveeat是,过滤后的属性文件由maven资源插件存储在目标目录中。
我怎么能在那里找到它?我需要属性文件来告诉我目标目录在哪里,但是properties-file是在目标目录中?
我的方法还值得做吗?或者这样不可能吗?
答案 0 :(得分:1)
我有两种方法:
<强> 1。使用Java Magic
在这里,我只是运行了一个技巧
@Test
public void testpath(){
//gets me surefire report dir, lies just below /target
File testDir = new File(TestTargetPath.class.getResource("/").getPath());
//Get its parent! location of target
System.out.println("target? " + testDir.getParent());
//modify your properties object to set this as targetDir
}
打印
target? /home/naishe/workspace/in/naishe/homeapp/target
<强> 2。使用相对路径
将配置文件作为资源读取在Maven布局中有两个位置放置资源文件,例如配置属性。
/src/main/resources
- 此下的文件作为工件的一部分。您可以使用getResource()
/src/main/java
来访问它们
/src/test/resources
- 此下的文件,不作为工件的一部分,但它们可从任何类/src/test/java
获得。
因此,根据您的需要,您可以将config.properties
保留在其中一个或两个位置,并使用以下方式读取配置文件:
Properties props = new Properties();
InputStream stream = AppConfig.class.getResourceAsStream("/config.properties");
props.load(stream);
System.out.println(">> " + props.getProperty("targetDir"));