我有一个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;在我们的持续集成系统上。
答案 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
来更改用于集成测试的主机,而不是更改部署时设置的主机。