0

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

targetdir = ${project.build.directory}

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

4

1 回答 1

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()以下任何类访问它们/src/main/java

  2. /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"));
于 2012-08-30T08:53:36.337 回答