1. はじめに
これまで、Maven で複数のプロジェクトにおいて異なるローカルリポジトリや依存関係を利用する際、プロジェクトごとに .m2/repository_sample
といったディレクトリを用意し、都度そのディレクトリを .m2/repository
にリネームして切り替えていました。
しかし、この方法は手動での操作が煩雑な上、今どのMavenリポジドリがアクティブなのか気にする必要があり、とてもストレスでした。
そこで、どうにかこの課題を解決できないかと調査した結果、settings.xml
を活用する方法が有効であると分かりました。
この記事では、その方法を備忘録としてまとめます。
2. Maven の settings.xml について
Maven には大きく分けて 2 つの settings.xml
があります。
-
グローバル settings.xml
Maven インストールディレクトリ内のconf/settings.xml
に存在し、全体に共通の設定が記述できます。 -
ユーザー settings.xml
通常はユーザーのホームディレクトリ(Windows ではC:\Users\<ユーザー名>\.m2\settings.xml
)に存在します。初期状態では存在しない場合が多いため、必要に応じて自分で作成します。
また、プロジェクトごとにカスタム設定を適用したい場合、settings.xml
を別ファイルとして作成し、実行時にそのファイルを指定する方法が利用できます。
3. プロジェクトごとのローカルリポジトリ設定ファイルの作成
例えば、プロジェクト専用のリポジトリとして repository_sample
を使用する場合、以下のような内容の設定ファイル(例: sample_settings.xml
)を作成します。
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 https://maven.apache.org/xsd/settings-1.0.0.xsd">
<!-- ローカルリポジトリのパスを指定(絶対パスを推奨) -->
<localRepository>C:/Users/[ユーザー名]/.m2/repository_sample</localRepository>
<!-- 必要に応じて、プロキシ、ミラー、サーバ認証情報などの設定を追加できます -->
</settings>
このファイルをプロジェクト内や共通の設定ディレクトリに配置し、Maven 実行時に指定することで、該当プロジェクトではこのローカルリポジトリを使用できます。
4. コマンドラインからの実行方法
コマンドラインでカスタムの settings.xml
を指定して Maven を実行する場合は、-s
オプションを使用します。
例えば、プロファイル stg
を有効にしてパッケージ化する場合、以下のように実行します。
mvn -s sample_settings.xml package -P stg
※ 設定ファイルは絶対パスで指定しても問題ありません。
このコマンドにより、Maven はデフォルトの ~/.m2/settings.xml
の代わりに sample_settings.xml
内の設定を読み込み、指定されたローカルリポジトリ(この例では repository_sample
)が使用されます。
5. IntelliJ IDEA での設定方法
普段 IntelliJ IDEA を使用して開発しているため、IntelliJ 内でもプロジェクトごとにカスタムの settings.xml
を利用して Maven を実行できるような設定を行いました。
5.1. Maven のグローバル設定の変更
-
IntelliJ の設定画面を開く
メニューから「ファイル」→「設定」を選択します。 -
Maven の設定を確認する
左側のメニューから「ビルド、実行、デプロイ」→「ビルドツール」→「Maven」を選択します。 -
Custom settings.xml の指定
「ユーザー設定ファイル」の欄に、使用したいカスタムsettings.xml
(この場合はsample_settings.xml
)のパスを入力します。
これにより、IntelliJ 内で Maven を実行する際に、指定した設定ファイルが使用されます。
5.2. Run/Debug Configuration での指定
-
Run/Debug Configuration の編集
メニューから「実行」→「実行構成の編集(R)...」を選択します。 -
Maven 実行構成の作成または編集
既存の Maven 実行構成を選択するか、新規作成します。 -
VM Options / Command-line Options に設定
必要に応じて、-P stg
やその他のオプション(例:-Dmaven.repo.local
)を追加できます。
通常、settings.xml
にリポジトリの設定を記述している場合、追加のオプションは不要です。
また、個別に使用するユーザー設定を切り替えたい場合は、「Maven オプション」→「設定から継承」のチェックボックスを外し、個別にsettings.xml
を指定することも可能です。
これらの設定により、IntelliJ IDEA から Maven のビルドを実行した場合でも、カスタムの settings.xml に記載されたリポジトリ設定が適用されます。
6. まとめ
プロジェクトごとにリポジトリ名を分けるためには、カスタムの settings.xml
(例: sample_settings.xml
)を作成し、以下の方法で利用します。
コマンドラインの場合:
mvn -s sample_settings.xml package -P stg
IntelliJ IDEA の場合:
Maven のユーザー設定で sample_settings.xml
のパスを指定するか、Run/Debug Configuration で適切なオプションを設定する。
これにより、プロジェクト固有の依存関係キャッシュ管理や環境構築が容易になり、ビルド時にどのリポジトリがアクティブかを気にする必要がなくなりました。
7. 参考情報
-
Maven 公式 – Settings Reference
Maven の設定ファイルの書き方や各種設定項目について記載されています。 -
IntelliJ IDEA – Maven
IntelliJ IDEA での Maven プロジェクトの取り扱い方法について解説されています。
8. 追記
最初は、ターミナルから実行する際に直接
mvn -Dmaven.repo.local="C:/Users/xxxx/repository_sample" -P dev clean package
のように指定できるのではないかと思っていましたが、うまくいかず…。
そのため、今回のように settings.xml
を活用する方法を採用しました。