在maven构建时替换测试属性值

时间:2014-08-08 15:21:18

标签: java maven-3

我有一个test.properties文件,位于:$ PROJECT_HOME / src / test / resources,内容如下:

hostname=${host}

我还有一个main.properties文件位于:$ PROJECT_HOME / src / main / resources,内容相同。

然后我在项目的pom文件中指定了以下行。

<properties>
    <host>localhost</host>
</properties>

<build>  
  <resources>
    <!-- Filter resource files -->
    <resource>
      <directory>src/main/resources</directory>
      <filtering>true</filtering>
    </resource>
  </resources>
  ....
</build>

执行mvn clean install后,我看到目标文件夹中的main.properties被localhost值替换。但是我的test.properties中的属性不是......

我的第一个想法是将资源调整为:

<properties>
    <host>localhost</host>
</properties>

<build>  
  <resources>
    <!-- Filter resource files -->
    <resource>
      <directory>src/main/resources</directory>
      <filtering>true</filtering>
    </resource>
    <resource>
      <directory>src/test/resources</directory>
      <filtering>true</filtering>
    </resource>
  </resources>
  ....
</build>

现在构建时,test.properties文件将替换为localhost值,但会放入目标中的classes文件夹中。在测试类中,仍然存在没有替换值的test.properties文件...

有没有办法同时替换test-classes文件夹中的值? 我的想法是使用localhost值在本地服务器上工作,而不将其指定为参数,并在对测试服务器执行集成测试时使用备用主机覆盖此值。在这种情况下,我指定值-Dhost =&lt;&gt;在我们的持续集成系统上。

1 个答案:

答案 0 :(得分:4)

这应该可以工作(虽然test.properties不会在你的classes文件夹中结束,而test-classes会同时包含test.properties和main.properties以及我认为你想要的替换值但是不是肯定)。

<resources>
    <!-- Filter resource files -->
    <resource>
      <directory>src/main/resources</directory>
      <filtering>true</filtering>
    </resource>
</resources>
<testResources>
    <!-- Filter test resource files -->
    <testResource>
      <directory>src/test/resources</directory>
      <filtering>true</filtering>
    </testResource>
</testResources>

此外,您可能希望有两个属性${host}(在host.properties中引用)和${test.host}(在test.properties中引用),否则如果在指定期间指定-Dhost集成构建它将替换host.properties和test.properties中的值。这样,您可以指定-Dtest.host来更改用于集成测试的主机,而不是更改部署时设置的主机。