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    (本番環境用)