Maven

Maven3で環境ごとのresourceを差分で管理する方法

More than 3 years have passed since last update.

Mavenでリソースファイルを環境毎に管理したい場合はよくあります。

以下はぐぐるとよく出てくる方法で、環境毎にプロファイルでresourceを定義するものです。


<profiles>
<profile>
<id>ローカル開発環境
<build>
<resources>
<resource>
<directory>src/ローカル開発環境/resources
</resource>
</resources>
</build>
</profile>
<profile>
<id>本番環境
<build>
<resources>
<resource>
<directory>src/本番環境/resources
</resource>
</resources>
</build>
</profile>
</profiles>


これでも環境毎にリソースを管理できますが、一方のリソースファイル配下のファイルを変更すると、他方のリソースファイル配下のファイルも変更しなくてはなりません。

2つくらいならいいかもしれませんが、環境が3つも4つもあるとこの方法では管理が苦痛になりますし、何よりも修正の展開が漏れのリスクが増します。

以下とするとこで、環境依存しないリソースと環境依存するリソースに分けられ、

少なくとも環境依存しないリソースについては展開漏れが起きなくなります。


<profiles>
<profile>
<id>ローカル開発環境
<build>
<resources>
<resource>
<directory>src/ローカル開発環境/resources
</resource>
<resource>
<directory>src/各環境共通/resources
</resource>
</resources>
</build>
</profile>
<profile>
<id>本番環境
<build>
<resources>
<resource>
<directory>src/本番環境/resources
</resource>
<resource>
<directory>src/各環境共通/resources
</resource>
</resources>
</build>
</profile>
</profiles>


仕様で決まってはいませんが、XMLは上から解釈されることが多いです。

ただし、pomのresourceタグの場合は、より上に記載した設定を優先させるために下から解釈しているようです。

上記のように記述することで、環境共通のリソースが展開された後で、環境依存のリソースを展開することができます。

開発中は、src/main/resources配下で全てを開発しておき、

結合試験に突入する前に、結合環境で変更しなくてはいけないものをsrc/it/resources配下に置いて編集して、pomに追加しておきます。

後はプロファイル指定してmvnを叩くようにすれば環境毎のリソースファイルを管理することが可能です。

本番環境の差分ファイルを作る時は、結合の差分をそのまま本番ようのディレクトリに置いてあげて中身を編集するのみで良いので、アプリ的な環境は簡単に構築できると思います。