如何使用maven资源插件中的maven过滤功能

时间:2012-08-30 08:24:17

标签: unit-testing maven filtering maven-resources-plugin

我有一个在maven的帮助下开发的java项目。该项目的一部分是单元测试。我计划将unittests生成的所有临时文件放入maven的目标目录。这可能是一个好主意,因为如果出于某种原因,单元测试不会删除临时文件,则可以清除目标目录,并且所有临时文件仍然位于文件系统中。所以我找到了maven资源插件的filtering函数,并想知道是否有可能为我的用例实例化它。我的计划是在属性文件中有一个像这样的条目

targetdir = ${project.build.directory}

它应该为我提供一个显示mavens target-directory位置的属性。现在,caveeat是,过滤后的属性文件由maven资源插件存储在目标目录中。
我怎么能在那里找到它?我需要属性文件来告诉我目标目录在哪里,但是properties-file是在目标目录中? 我的方法还值得做吗?或者这样不可能吗?

1 个答案:

答案 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布局中有两个位置放置资源文件,例如配置属性。

  1. /src/main/resources - 此下的文件作为工件的一部分。您可以使用getResource()

  2. 下的任何类/src/main/java来访问它们
  3. /src/test/resources - 此下的文件,作为工件的一部分,但它们可从任何类/src/test/java获得。

  4. 因此,根据您的需要,您可以将config.properties保留在其中一个或两个位置,并使用以下方式读取配置文件:

        Properties props = new Properties();
        InputStream stream = AppConfig.class.getResourceAsStream("/config.properties");
        props.load(stream);
        System.out.println(">> " + props.getProperty("targetDir"));