Java 在maven构建时替换测试属性值
我有一个test.properties文件,位于:$PROJECT_HOME/src/test/resources中,内容如下:Java 在maven构建时替换测试属性值,java,maven-3,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>
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>
本地服务器
src/main/resources
真的
....
执行mvn clean安装后,我看到目标文件夹中的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>
本地服务器
src/main/resources
真的
src/测试/资源
真的
....
现在构建时,test.properties文件将替换为localhost值,但会放在目标中的classes文件夹中。在测试类中,仍然存在没有替换值的test.properties文件
是否有方法也替换test classes文件夹中的值?
我的想法是使用localhost值在本地服务器上工作,而不将其指定为参数,并在对测试服务器执行集成测试时使用备用主机覆盖此值。在本例中,我在我们的持续集成系统上指定了值-Dhost=。这应该会起作用(尽管test.properties不会出现在您的classes文件夹中,测试类会同时包含test.properties和main.properties,并带有替换的值,我认为这是您想要的,但不确定)
src/main/resources
真的
src/测试/资源
真的
另外,您可能希望有两个属性,
${host}
(在host.properties中引用)和${test.host}
(在test.properties中引用),否则,如果在集成构建期间指定-Dhost
,它将替换host.properties和test.properties中的值。通过这种方式,您可以指定-Dtest.host
来更改用于集成测试的主机,但不更改部署时设置的主机。如果您使用的是Spring Framework,则应签出@PropertySources
注释。它允许您指定几个@PropertySource
注释来为您加载属性文件。谢谢,这正是我所需要的!只需一句话,在testResources中,只允许使用testResource元素,而不是示例中提到的资源元素。谢谢,整理了我的答案。
<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>