【问题标题】:How to use maven filtering function from maven resources plugin如何使用maven资源插件中的maven过滤功能
【发布时间】:2012-08-30 08:24:17
【问题描述】:

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

targetdir = ${project.build.directory}

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

【问题讨论】:

  • 您的测试从目标目录运行。那么,为什么不创建targetDir = .
  • 测试从 target-dir 运行,但应用程序将文件存储在不同的位置,这些位置还不能通过命令行参数或属性文件进行配置。它们只能作为参数传递给函数调用。

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


【解决方案1】:

我有两种方法:

1.使用 Java 魔法
在这里,我只是跑了个把戏

@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 -- 此下的文件作为工件的一部分。您可以在/src/main/java 下的任何类中使用getResource() 访问它们

  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"));

【讨论】:

  • 您能详细说明一下“MyAppConfigInMainCode”吗?这是什么?您是否注意到属性文件将用于单元测试(因为您建议将其放在 src/main/resources 中)。
猜你喜欢
  • 2011-11-20
  • 1970-01-01
  • 2017-05-25
  • 2016-08-16
  • 1970-01-01
  • 2012-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多