読みかけの技術ノート

やったこと、困ったこと、解決したこと、書いていきます。

Maven2-環境ごとの設定ファイル差し替え

背景

職場でビルドツールとしてMaven2を使用しているが、ビルド手順が環境によって変わり、ヒューマンエラーが起きやすい状態になっている。

  • 環境ごとに異なる設定ファイルを、環境ごとに用意されているバッチを選んで実行することで差し替えている。
  • バッチファイルは7個くらい
  • 単純にダサい…

調べてみたら、Maven2だとそれが設定次第で上手くやれるみたいなので、実際にやってみようという話。

環境

設定ファイル置き換え

参考サイト

http://www.techscore.com/tech/Java/ApacheJakarta/Maven/6/ http://kakakikikeke.blogspot.jp/2014/04/maven.html

概要

maven-war-pluginを導入し、pom.xmlprofilesタグ内で設定ファイルを切り替える。

環境ごとの設定ファイルを作成

それぞれ差し替えを確認できるように、内容を編集しておく。

C:\tmp\sample\src
resources
│
└─conf
    │  test.config(ここを差し替える)
    │  other.config
    │
    ├─dev(開発用)
    │      test.config
    │
    ├─real(本番用
    │      test.config
    │
    └─stg(ステージング用)
            test.config

pom.xmlの編集

  • idタグの値をmvn compile -P XXXの"XXX"で指定する。
  • 差し替えるファイルが配置されているフォルダを指定する。

    <!-- 環境設定ファイルの差し替え設定 -->
    

    dev dev stg stg real real

  • mvnのphaseがcompileの時のみ差し替えが実行される

  • directoryからoutputDirectoryへコピーされる。
  • 先に記述したほうが優先(最後に上書き)。
  • 前の項で設定したconfigFileDirectoryを使用して、差し替えに使用するフォルダ名に置換する。
  • 複数ファイルで実施したい場合は、incledeを使用したり、executionタグを複数設定する。参考

    <build>
    <sourceDirectory>src/main/java</sourceDirectory>
    <outputDirectory>target/classes</outputDirectory>
    
    <!-- confフォルダを出力に追加 -->
    <resources>
      <resource>
        <directory>src/resources</directory>
      </resource>
    </resources>
    
    <plugins>
    
      <!-- 設定ファイル差し替え用 -->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-resources-plugin</artifactId>
        <version>2.6</version>
        <executions>
          <execution>
            <id>copy-resources</id>
            <!-- compile時のみ対象 -->
            <phase>compile</phase>
            <goals>
              <goal>copy-resources</goal>
            </goals>
            <configuration>
              <resources>
                <resource>
                  <directory>src/resources/conf/${configFileDirectory}</directory>
                  <filtering>true</filtering>
                </resource>
              </resources>
              <!-- コンパイル結果出力先のconf配下を差し替え -->
              <outputDirectory>target/classes/conf</outputDirectory>
            </configuration>
          </execution>
        </executions>
      </plugin>
    
      ....
    
    </plugins>
    

実行

C:\tmp\sample>mvn clean compile -P real

中身を確認し、差し替わっているか確認する。