次のプロパティ ファイル構造を持つ 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>