pom.xml内で${...}と記述することで変数置換ができることと同様に、maven-resources-pluginのフィルタリングを利用することで設定ファイル(e.g., system.properties)内でも変数置換が行える。
よくありそうなユースケース
-
pom.xml内のproject.versionをプロパティファイル経由でプログラムが利用する - 設定ファイルの各種パスで
project.basedirを利用してテスト実行などではプロジェクト内で入出力を完結させる - etc...
そもそもmaven-resources-pluginって何ですか?
ソース以外の設定ファイルリソースなどをコピーするためのプラグイン。
http://maven.apache.org/plugins/maven-resources-plugin/
基本的な挙動
このプラグインが利用する項目の一部を抜粋。
<build>
<outputDirectory>${project.build.directory}/classes</outputDirectory>
<testOutputDirectory>${project.build.directory}/test-classes</testOutputDirectory>
<resources>
<resource>
<directory>${project.basedir}/src/main/resources</directory>
</resource>
</resources>
<testResources>
<testResource>
<directory>${project.basedir}/src/test/resources</directory>
</testResource>
</testResources>
</build>
-
resources:resourcesゴールでresourcesで指定しているディレクトリ以下リソースをoutputDirectoryへコピーする -
resources:testResourcesゴールでtestResourcesで指定しているディレクトリ以下リソースをtestOutputDirectoryへコピーする
単純に言えばコピーしているだけですね。
特定ファイルのみコピー/除外
例えば拡張子が.txtと.rtfのみコピーする場合はincludesでパターンを指定。
<resources>
<resource>
<directory>src/my-resources</directory>
<includes>
<include>**/*.txt</include>
<include>**/*.rtf</include>
</includes>
</resource>
</resources>
逆に除外する場合はexcludesでパターンを指定する。
<resources>
<resource>
<directory>src/my-resources</directory>
<excludes>
<exclude>**/*.bmp</exclude>
<exclude>**/*.jpg</exclude>
<exclude>**/*.jpeg</exclude>
<exclude>**/*.gif</exclude>
</excludes>
</resource>
</resources>
本題:フィルタリング
フィルタリングのExamplesはこれ。
http://maven.apache.org/plugins/maven-resources-plugin/examples/filter.html
filteringにtrueを設定するとコピー時にフィルタリングが有効になる。
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
system.propertiesにこう書き、
version=${project.version}
pom.xml内で<version>1</version>となっているならば、
version=1
のように変換されて出力される。使える変数はpom.xml内と同様(のはず、明示的な言及は未確認...)。
${project.basedir}などももちろん利用できる。例えばログ出力パスが設定にあり、ローカル実行時は出力をoutputDirectory以下としたければ、
log4j.appender.C.File=${project.build.outputDirectory}/temp/a.log
などと書いておけばいいんじゃないでしょうか。
まとめ
- maven-resources-pluginのフィルタリングを利用して設定ファイルなどもDRYに書きましょう