Maven(読み方:めいぶん)はApacheソフトウェア財団が開発したJavaのプロジェクト管理ツールです。Java以外のプログラミング言語でも使用できますが、主にJavaプロジェクトで使用されるツールで、Javaの開発に携わる人であれば理解必須の基本ツールの1つです。
大規模なJavaプロジェクトでは複数のライブラリやフレームワークが必要になってきます。これらのライブラリのバージョン管理や依存関係の解決を手動で行うのは非常に煩雑。そこで登場するのがMavenです。
日常生活で例えてみると、Mavenは複雑な料理を作る際の「キッチンのマネージャー」のようなもの。多くの材料(ライブラリ)を使う料理では、何が必要か、どの順番で調理するかを管理するのが非常に難しくなりますが、これを誰でも簡単に管理しやすくするためのツールがMaven。
簡単に一言でまとめると、Mavenは開発プロセスを管理→自動的に必要な材料を用意し、適切な順序で調理(ビルド)を進めてくれる存在だと言えます。
このページでは、Mavenとは何か?の理解を深めつつ、実際に利用する方法も手順付きでご説明します。
Mavenとは何かをわかりやすく
MavenはJavaのプロジェクトの管理ツールです。具体的に言うと、MavenはPOMファイル(Project Object Model)を中心に動作するツールで、POMファイルに記載されているプロジェクトの設定やソースコードの依存関係に応じてリポジトリから必要なライブラリを取得し、ビルドプロセスを実行する仕組み。
図で示すとこんな感じ。
Maven
Mavenはプロジェクト全体を管理する「プロジェクト管理ツール」自体。で、主な役割は以下の通り。
- 依存関係の管理
- プロジェクトで必要なライブラリやプラグインを自動的にダウンロードして管理。例えば、あなたがプロジェクトで使用するライブラリを指定すると、Mavenがそのライブラリをインターネットから探してきてくれます。
- ビルドプロセスの自動化
- ソースコードのコンパイル、テストの実行、パッケージ化などのビルド作業を自動で行います。例えば、Mavenコマンド1つでソースコードをコンパイル → テスト実行 → 実行可能なJARファイルの生成 を行ってくれます。
- プロジェクト構造の標準化
- プロジェクトのディレクトリ構造やファイル配置を標準化し、新しい開発者が参加しやすくします。
POMファイル
POMファイル(Project Object Modelファイル)は、プロジェクトの「設計図」。このファイルには、プロジェクトの情報や依存関係、ビルド手順が記述されています。
ポイント POMファイルで定義されている内容
- プロジェクトの基本情報
- プロジェクトの名前、バージョン、作者などの基本的な情報。
- 依存関係の定義
- プロジェクトで必要なライブラリやプラグイン。例えば、特定のライブラリを使いたい場合、そのライブラリの名前とバージョンをPOMファイルに記述します。
- ビルド設定
- プロジェクトのビルド手順や使用するプラグインが記載されています。例えば、コンパイルやテストに使用するプラグインをここに設定します。
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <!-- プロジェクトのモデルバージョン --> <modelVersion>4.0.0</modelVersion> <!-- プロジェクトの基本情報 --> <groupId>com.example</groupId> <!-- プロジェクトのグループID --> <artifactId>my-app</artifactId> <!-- プロジェクトのアーティファクトID --> <version>1.0-SNAPSHOT</version> <!-- プロジェクトのバージョン --> <!-- プロジェクトの依存関係 --> <dependencies> <!-- JUnitライブラリの依存関係 --> <dependency> <groupId>junit</groupId> <!-- JUnitのグループID --> <artifactId>junit</artifactId> <!-- JUnitのアーティファクトID --> <version>4.12</version> <!-- 使用するJUnitのバージョン --> <scope>test</scope> <!-- テストスコープに限定 --> </dependency> </dependencies> <!-- プロジェクトのビルド設定 --> <build> <plugins> <!-- Mavenコンパイラプラグイン --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <!-- 使用するプラグインのバージョン --> <configuration> <source>1.8</source> <!-- ソースコードのバージョン --> <target>1.8</target> <!-- コンパイル後のバージョン --> </configuration> </plugin> </plugins> </build> </project>
補足:Maven「プロジェクト」について
Mavenプロジェクトの単位は、通常1つのプロジェクトに対して1つの機能や関連する一連の機能をまとめる形で作成されます。より具体的に言えば「ビルドやデプロイをしたい単位で」作ります。
例えば、「便利ツールプロジェクト」として複数のツール(機能)を1つのMavenプロジェクトにまとめることは可能です。ただし、それぞれの機能が独立している場合や複数のチームが開発に関与する場合は(ビルドやデプロイを機能ごとに行う方が楽なので)機能ごとに個別のMavenプロジェクトを作成します。
開発の目的と状況に応じて適切な単位でプロジェクトを作成する必要があります。
リポジトリ
リポジトリは、ライブラリやプラグインを保管する「倉庫」です。リポジトリには2種類あります
- ローカルリポジトリ
- 開発者のPCに保存されるリポジトリ。Mavenが最初にここをチェックして、必要なライブラリが既にダウンロードされていればそれを使用します。
- リモートリポジトリ
- インターネット上にあるリポジトリです。Maven Centralなどがこれにあたります。ローカルリポジトリにライブラリが見つからない場合、Mavenはリモートリポジトリから必要なライブラリをダウンロードします。
Mavenの使用方法
基本知識をインプットしたところで、ここからは実際にMavenを使用する方法を解説します。
1. Mavenのインストール
手順
- Mavenの公式サイトからMavenをダウンロード。
- ダウンロードしたアーカイブファイルを解凍。
- 解凍したディレクトリを適切な場所に配置(例:
C:\Program Files\Apache\Maven
)。
環境変数の設定
- MAVEN_HOMEという環境変数を設定し、Mavenのインストールディレクトリを指定。
- PATH環境変数に、
%MAVEN_HOME%\bin
(Windowsの場合)または$MAVEN_HOME/bin
(Unix系OSの場合)を追加。
インストール確認
ターミナル(コマンドプロンプトやPowerShell)を開き、以下のコマンドを実行してMavenが正しくインストールされたことを確認。
mvn -v ----以下のような表示が出ればOK---- Apache Maven ~~~~~ Maven home: C:\app\apache-maven-3.9.6 Java version: 11.0.22, vendor: Eclipse Adoptium, runtime: C:\~~~~~ Default locale: ja_JP, platform encoding: MS932 OS name: "windows 11", version: "10.0", arch: "amd64", family: "windows"
2. 新規プロジェクトの作成
手順
- ターミナルを開き、以下のコマンドを実行。
mvn archetype:generate -DgroupId=com.example -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
このコマンドを実行することで、Mavenは標準的なディレクトリ構造を持つ新しいプロジェクトを作成します。具体的には、以下のようなディレクトリ構造になります。
my-app/ ├── pom.xml - プロジェクトのPOMファイル。プロジェクトの設定や依存関係を記述 ├── src/ - ソースコードとリソースを格納するディレクトリ │ ├── main/ - アプリケーションのメインソースコードを格納 │ │ ├── java/ - Javaソースファイルを格納 │ │ │ └── com/ │ │ │ └── example/ │ │ │ └── App.java - メインクラスのサンプルファイル │ │ └── resources/ - アプリケーションのリソースファイルを格納 │ └── test/ - テストコードとリソースを格納するディレクトリ │ ├── java/ - テスト用のJavaソースファイルを格納 │ │ └── com/ │ │ └── example/ │ │ └── AppTest.java - テストクラスのサンプルファイル │ └── resources/ - テスト用のリソースファイルを格納 └── target/ - Mavenのビルド成果物が格納されるディレクトリ
3. POMファイルの設定
pom.xml
ファイルはプロジェクトのルートディレクトリにあります。ここにプロジェクトの依存関係やビルド設定を記述します。
サンプル POMファイル
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.example</groupId> <artifactId>my-app</artifactId> <version>1.0-SNAPSHOT</version> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> </plugins> </build> </project>
4. プロジェクトのビルドと実行
最後に以下のコマンドを順番に実行することで、Mavenを利用してプロジェクトのビルドから実行までを一連の流れで行うことができます。この手順に従うことで、プロジェクトのクリーン、コンパイル、テスト、パッケージ化、インストール、実行がスムーズに行えるようになります。
# プロジェクトディレクトリに移動 cd my-app # プロジェクトのクリーン mvn clean # ソースコードのコンパイル mvn compile # テストの実行 mvn test # パッケージの作成 mvn package # パッケージをローカルリポジトリにインストール mvn install # 作成されたJARファイルの実行 java -jar target/my-app-1.0-SNAPSHOT.jar