Maven2で環境に合わせて設定ファイルを切り替える方法(改訂版)
新案件でpom.xmlの設定を見直したら、以前のエントリの方法が冗長だったので書き直し。
各環境で共通の設定部分をprojectタグ直下のbuildタグ内にまとめたことで、よりDRYな構成となった。
1.resourcesフォルダ以下のように分け、上書き変更したいファイルを置く。
src/main/resources/config.properties (開発) src/integration/resources/config.properties (結合テスト環境) src/production/resources/config.properties (本番)
2.pom.xmlを以下のように記述 (※2008/5/21 一部修正)
<?xml version="1.0" encoding="UTF-8"?> <project> 〜 <build> ← 共通設定はすべてprojectタグ直下のbuildに記述 <sourceDirectory>src/main/java</sourceDirectory> <outputDirectory>src/main/webapp/WEB-INF/classes</outputDirectory> <!-- コメントアウト。 ※buildタグ内にresourceがあると、profileで指定したresourceフォルダが再上書きされてしまう。 <resources> <resource> <directory>src/main/resources</directory> </resource> </resources> --> 〜 </build> <profiles> ← profilesタグで対象となる環境を切り替えてbuildできるようにする。 <profile> <id>integration</id> <build> ← 環境に応じた設定を各profile設定のbuildに記述 <resources> <resource> ← 先に記述した設定が優先(最後に上書き)される。 <directory>src/integration/resources</directory> </resource> <resource> <directory>src/main/resources</directory> </resource> </resources> </build> </profile> <profile> <id>production</id> <build> <resources> <resource> <directory>src/production/resources</directory> </resource> <resource> <directory>src/main/resources</directory> </resource> </resources> </build> </profile> </profiles>
3.本設定を行ったプロジェクトで、Mavenコマンドの-Pオプションを変更することで設定変更可能となる
※例:warファイルのクリーンパッケージング
$ mvn clean package (開発環境用) $ mvn clean package -Pintegration (結合テスト環境用) $ mvn clean package -Pproduction (本番環境用)