1

我有一个具有以下属性文件结构的 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>
4

0 回答 0