Maven 入門 | その他 | 環境別に設定ファイルを分離する
プログラムを開発していると、さまざまな設定ファイルを管理することになる。JDBC 設定情報、logging 設定情報、その他の resource などがあるだろう。こうした設定ファイルは、テスト、本番などの段階ごとに異なる設定を持たざるを得ない。package のたびに設定ファイルを手作業で変更しなければならないとしたら、かなり面倒な状況になる。
これは Maven の profile を利用することで、package build 時に異なる構成にできる。
環境別にリソースフォルダを分ける
メインソースに環境別のリソースフォルダを作成し、各環境に合わせた設定ファイルを作成する。
- src/main/resources-${env}
たとえば、テスト環境と本番環境がある場合は、次のような構成にできる。
- 開発テストサーバー環境
- src/main/resources-dev
- src/main/resources-dev/jdbc.properties
jdbc.driverClassName=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://127.0.0.1/database jdbc.username=root jdbc.password=1234
- 実際の本番サーバー環境
- src/main/resources-real
- src/main/resources-real/jdbc.properties
jdbc.driverClassName=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://192.168.0.1/database jdbc.username=admin jdbc.password=1111
pom.xml に build の追加設定を行う
Maven の pom.xml で、build の resource が環境に合ったパスを探すように設定する。
次は、選択された profile に対応するリソースフォルダを classpath に入れる作業である。基本的に src/main/resources は含まれ、追加で環境別リソースフォルダを入れればよい。以下の内容を pom.xml の build 部分に追加する。
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
</resource>
<resource>
<directory>src/main/resources-${env}</directory>
</resource>
</resources>
</build>
pom.xml に profile の追加設定を行う
次に Maven profile の設定によって、ビルド段階で目的のリソースフォルダを classpath に追加する。
まず、pom.xml に次のように profile を追加する。
<profiles>
<profile>
<id>dev</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<env>dev</env>
</properties>
</profile>
<profile>
<id>real</id>
<properties>
<env>real</env>
</properties>
</profile>
</profiles>
- dev profile に設定された
<activeByDefault>は、package 時に特別なコマンドがなければ既定のプロファイルになる。
pom.xml に既定 profile を設定する
Maven 実行時の既定 profile を指定する。方法は次の 2 つがある。
properties に env を追加する。
<properties>
<!-- -P で明示しない場合の既定プロファイル -->
<env>dev</env>
</properties>
または、該当 profile に activation を追加する。
<profile>
<id>dev</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<env>dev</env>
</properties>
</profile>
上記の設定をしないと、src/main/resources-${env} にある設定ファイルは package に含まれない。
mvn package -P プロファイル名でパッケージングする
このように設定した profile は、Maven コマンドで -P オプションを付けて選択できる。
mvn clean package -P dev
mvn package コマンドの実行時に -P を追加しない場合は、既定 profile でパッケージングされる。