1

次のプロパティ ファイル構造を持つ Maven プロジェクトがあります。

./clientA/
    dev.properties
    staging.properties
    production.properties
./clientB/
    dev.properties
    staging.properties
    production.properties

などなど。

プロパティの 90% は、同じ環境内のクライアント間ですべて同じです (たとえば、clientA と clientB の dev props は通常すべて同じです)。ただし、同じプロパティがすべてのクライアントで同じであるとは限りません。

私がやりたいのは、ルート レベルで common.[dev|staging|production].properties ファイルを作成し、そこにすべての共通プロパティを移動してから、必要に応じて、クライアント プロパティ ファイルで共通プロパティをオーバーライドすることですが、それはできません。 Maven ではサポートされていないようです。たとえば、Maven は最初に処理されたプロパティ ファイルの値のみを使用するため、フィルタリングに使用される 2 つのプロパティ ファイルで同じプロパティを定義することはできません。

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}

Resources-プラグイン構成

<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