shimashimaの日記: [Java][maven]環境毎にPropertyファイルを置換する その1
Javaのビルドツールmavenを使用している状況で、環境依存の値を手軽に書き換える方法。
いくつかあるようだが、そのうちのひとつを書いてみる。
1.resourceのfilter設定を行う
resourcesディレクトリ(デフォルトでは src/main/resources)配下のファイルに対して、pom.xmlで定義されたプロパティで置換を行うように設定をする。
pom.xmlに
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
のように、
<filtering>true</filtering>
の記述を追加する。
こうすることで、たとえば
SAMPLE.PROP=${REPRACE.PROP}
という記述について、${REPRACE.PROP}をpom.xml内で定義されているプロパティで置換してくれる。置換のタイミングは resouces フェーズなので、
$ mvn compile
とすることでも実行される。
なお、通常pom.xmlでプロパティを定義する場合は、
<properties>
<maven.findbugs.enable>true</maven.findbugs.enable>
</properties>
のような記述を要素のあとに追加する。
上記の場合、[maven.findbugs.enable]というプロパティに[true]を設定することを意味する。
2.置換対象ファイルの修正
1.で説明したように、置換対象ファイルを置換対象文字列に置き換える。
3.環境毎にプロパティをpom.xmlに記述する
次に環境依存の値をpom.xmlに記述していく。
1.で説明した方法だと環境毎の切り替えができない。
そこで、mavenのprofileという概念とプロパティを組み合わせることで解決する。
profileとはある名称に紐付けられた値の塊のようなもの。
詳細は各自で調べてほしいが、以下のように設定する。
<profiles>
<profile>
<id>production</id>
<properties>
<file.upload.temp.path>/tmp</file.upload.temp.path>
</properties>
</profile>
<profile>
<id>staging</id>
<properties>
<file.upload.temp.path>/tmp</file.upload.temp.path>
</properties>
</profile>
<profile>
<id>integration</id>
<properties>
<file.upload.temp.path>/var/tmp</file.upload.temp.path>
</properties>
</profile>
</profiles>
ここではprofileを[production][staging][integration]の三つを定義し、その中でプロパティ[file.upload.temp.path]を設定している。この例ではプロパティだけを設定しているが、プラグインの実行や各種ディレクトリの変更も可能なようだ。
4.環境に応じていmavenを実行する
3.で定義したprofileを指定してmavenの各種goalを実行するには、
$ mvn -P integration compile
のように
-P [profile名]
を追加して実行すればよい。
環境毎の差異の吸収はビルドのタイミングではんかうSeasar2にようにランタイムで行う方法もある。
ここであげた方法はビルド時に行う方法のうちの一つでしかないので、個々のプロジェクトに応じた方法を利用してほしい。
[Java][maven]環境毎にPropertyファイルを置換する その1 More ログイン