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

Mat*_* G. 2 java maven-3

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

hostname=${host}
Run Code Online (Sandbox Code Playgroud)

我还有一个 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>
Run Code Online (Sandbox Code Playgroud)

执行 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>
Run Code Online (Sandbox Code Playgroud)

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

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

Pac*_*ace 5

这应该可以工作(尽管 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>
Run Code Online (Sandbox Code Playgroud)

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