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.xml
のprofiles
タグ内で設定ファイルを切り替える。
環境ごとの設定ファイルを作成
それぞれ差し替えを確認できるように、内容を編集しておく。
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"で指定する。差し替えるファイルが配置されているフォルダを指定する。
<!-- 環境設定ファイルの差し替え設定 -->
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
中身を確認し、差し替わっているか確認する。