我有一个具有以下属性文件结构的 Maven 项目:
./clientA/
dev.properties
staging.properties
production.properties
./clientB/
dev.properties
staging.properties
production.properties
等等等等。
90% 的属性在同一环境中的客户端之间都是相同的(例如,clientA 和 clientB 上的开发道具通常都是相同的)。但是,不能保证在每个客户端中相同的属性都相同。
我想做的是在根级别创建一个 common.[dev|staging|production].properties 文件,将所有公共属性移到那里,然后根据需要覆盖客户端属性文件中的公共属性,但这并没有' 似乎不受 Maven 支持,例如,我无法在用于过滤的两个属性文件中定义相同的属性,因为 Maven 仅在处理的第一个属性文件上使用该值。
我将如何在 Maven 中实现相同的功能?有没有其他方法可以解决这个问题?还是不可能?
这是我想做的事情:
common.dev.properties:
foo=bar
clientA/dev.properties
foo=snafu
custom.prop=clientA Value
clientB/dev.properties
custom.prop=clientB Value
过滤后的值应该是:
clientA:
foo=snafu
custom.prop=clientA Value
clientB:
foo=bar
custom.prop=clientB Value
取而代之的是,目前发生的是:
clientA:
foo=bar (i.e. the common.dev.properties foo property value can not be overriden)
custom.prop=clientA Value
clientB:
foo=bar
custom.prop=clientB Value
资源:
src/main/resources/test.properties
foo=${foo}
custom.prop=${custom.prop}
资源插件配置
<build>
<filters>
<filter>${basedir}/env/common.properties</filter>
<filter>${basedir}/env/${client.name}/${env}.properties</filter>
</filters>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.5</version>
<configuration>
<encoding>UTF-8</encoding>
</configuration>
<executions>
<execution>
<id>copy-resources</id>
<phase>process-resources</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${basedir}/target/classes</outputDirectory>
<resources>
<resource>
<filtering>true</filtering>
<directory>src/main/resources</directory>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>