Blog

Mavenオプション「P」を使って、ローカル・開発・本番を運用分け出来るようにする

 こんにちは。ニフティ株式会社、新卒2年目の小林です。
 近日、Javaプロジェクトをインフラから作ることに着手しており、Mavenを使用したパッケージのビルドを行うことになりました。その際に得た便利なPオプションについて共有します。

変更内容

 結論から述べますと、以下の2項目により実現可能です。maven 3.5.2 を使用しています。

ビルド時コマンドの追加

 &env はpom.xmlで設定したidを入力します。(例:hoge1, local, develop, production)

pom.xmlの変更

 <profiles><profile>タグにより、各環境(id)ごとに変化する定数について設定することが出来ます(<properties>)。また、<activation>, <activeByDefault>で指定されたprofileを、Pオプションが設定されていなかった場合の初期値に設定することが出来ます。(公式

 そののち、<properties>で設定したタグ名を共通した箇所で使用することで、環境ごとの設定を反映させることが出来ます。
 例えば、warとしてパッケージ化する際のwebappDirectoryのパス指定(参考)を以下のように変数化することが出来ます。

例えば、 -P hoge1 と指定されていれば、 ${fuga1}には hoge1のprofileで設定されたfuga1が指定されます。

ユースケース

様々な環境における構成図とprofileの例を紹介します。含まれているファイルの拡張子は、読み込む形式に従って適切に変更してください。

ただ、<id>タグと、<properties>タグの中身を変更するのみです。

ローカル環境

設定ファイルの中に、Dockerで作成されたネットワーク内のWiremockを使用するコードがあった場合です。

開発環境

設定ファイルの中に、開発用の外部APIを使用するコードがあった場合です。
本番環境も構成は同じになります。

本番環境(商用)

<profiles>まとめ

以上3環境の設定をpom.xmlに記載した際の<profiles>を以下に記述します。
<activeByDefault>が指定されているため、Pオプションを設定しない場合はlocalのprofileが呼び出されます。

終わりに

 今回はMavenのビルド時における、便利なPオプションについてまとめました。コマンドの追加とpom.xmlの変更のみで、環境ごとに読み込むファイルを変更することが出来ました。Javaの勉強をしていくにつれて、他にも便利な機能が存在すると思うので、環境に合わせた最適なオプションを設定出来るように日々研鑽していきます。

ニフティでは、
さまざまなプロダクトへ挑戦する
エンジニアを絶賛募集中です!
ご興味のある方は以下の採用サイトより
お気軽にご連絡ください!

ニフティに興味をお持ちの方は
キャリア登録をぜひお願いいたします!

connpassでニフティグループに
参加いただくと
イベントの
お知らせが届きます!