mavenのprofile機能について

最近まで知らなかったのですが、mavenには「profile」という便利な機能が存在します。
今回はこれの使い方について。

Web系のプロジェクトや対向サーバの存在するプロジェクトではよくあることと思いますが、

  • コーディング時はローカル環境で動かし、迅速に動作確認する。
  • 結合フェーズでは開発環境にデプロイして試験する。
  • 最終的には本番環境にデプロイしてシステムテストする。

という段階を踏みながら開発を進めていくということがあります。

で、この環境依存の情報をどこに定義するか?ということ。
システムプロパティや環境変数に値を設定してもいいけど、環境情報なんでやはり人の目に見える形(つまり何がしかのファイル)に記述されるのが良いと思います。
システムプロパティや環境変数だと開発担当者が変わったら実は情報が引き継がれなかったりということがあるんですね。
つまり保守性の観点より、ファイルの方がいいと。
また、これは「コンパイル/ビルド/リリース」といったことに関わる情報ですので、それに付随するファイルに記述されているのが直感的でわかりやすく、保守性も上がるのではないかと思います。

そこで出てくるのがmavenの「profile」機能です。
これはたとえば以下のように使います。

<project>
  <properties>
    <db.host>localhost</db.host>
    <ftp.host>localhost</ftp.host>
    <ssh.host>localhost</ssh.host>
  </properties>

  ・・・・・・

  <profiles>
    <profile>
      <id>release</id>
      <db.host>10.192.168.10</db.host>
      <ftp.host>10.192.168.125</ftp.host>
      <ssh.host>10.192.168.36</ssh.host>
    </profile>
  </profiles>
</project>

こうしておいて

プロンプト> mvn -P release package

を実行するとリリースモードでパッケージング出来るという、なんとも便利な機能でした。
profileは複数定義可能なので「staging(ステージング環境)」「release(本番環境)」の2つくらいを定義しておくのが良いのではないかと思います。