Java
2022.08.25
Mavenとは?インストールから使い方までサンプル付きでわかりやすく解説!
2023.11.15

Javaの基礎知識を身に着けた次のステップがプロジェクト開発。その中で出てくるのがMavenをはじめとするビルドツールです。

本記事では、Java向けのビルドツールである「Maven」について解説していきます。


1.Mavenとは?

Mavenは、Apacheプロジェクトのひとつとして開発が進められているため、「Apache Maven」と表記される場合もあります。


Mavenは、プログラムをビルドすることを目的として利用する「ビルドツール」のひとつで、主にJavaで書かれたプロジェクトをビルドするために利用します。


詳しい解説は後述しますので、まずは「Mavenを使うことでJavaプロジェクトの開発が楽になる」と理解するとよいでしょう。

読み方は「メイブン」や「メイヴェン」と表記されますが、「メイヴェン」の方がよりネイティブな発言に近いでしょう。

①Gradleとの違い

同じく、Javaで使えるビルドツールとして「Gradle」が存在します。

実は、MavenもGradleもできることに大きな違いはありません。


ただし、Gradleの方が後発であることもあり、Mavenの面倒な部分をより細かいカスタマイズができるようになっています。

そのため、やりたいことによってMavenかGradleかを選ぶとよいでしょう。

2.Mavenを使ってできること


次に、Mavenを使ってできることを紹介します。

①ライブラリの管理

Mavenの最大のメリットが、「プロジェクトで利用するライブラリを管理できる」という点です。


Javaには多くのライブラリが存在しており、それらのライブラリを使うことで高速に開発を進めることが可能です。
ライブラリについての詳しい記事は以下の記事を参照してみてください。


Javaのおすすめライブラリ一覧!インストールから使い方まで解説

Mavenでは、XMLに必要なライブラリの情報を記述することで、「そのプロジェクトに必要なライブラリ」を一元管理してくれます。


また、Mavenは依存性を管理する機能も備わっています。

例えば、あるライブラリAを使いたい場合を考えてみましょう。


ライブラリAは、他のライブラリであるBを利用している場合、JavaのプロジェクトにはライブラリAとライブラリBを含める必要があります。

ですが、Mavenを利用した場合には、「ライブラリA」の情報のみを記述するだけで良くなるのです。

Maven上に存在するライブラリAには、「ライブラリBを利用するよ(依存関係がある)」ということが明記されており、Mavenはこの依存関係を自動で吸収してくれます。


プロジェクトには「ライブラリAを利用する」と記述するだけで、ライブラリBも自動で依存関係に含めてくれるのです。


このように、ライブラリの管理が非常に楽になるのがMavenの大きなメリットと言えるでしょう。

②ライブラリの自動インストール

Mavenは利用するライブラリを管理するだけでなく、それらのライブラリを自動でインストールしてくれます。


先ほど紹介した「依存関係」を自動で検出し、必要なライブラリを一括でダウンロードしてくれるのです。


手動でライブラリをインストールする必要がないので、複数人で開発するときにありがちな「ライブラリのバージョンが違ったので挙動が異なってしまう」というような問題も発生しなくなります。

③ビルド

もうひとつのメリットが「プロジェクトのビルド」です。

コマンドを実行するだけで、


・必要なライブラリのインストール

・Javaファイルのコンパイル

・自動テスト

・パッケージ(JarやWar)の作成

上記の処理を一括で実行できます。


ビルドからテストまでを一括で実施してくれることで、人の手による作業を減らす役割を担っています。

そのため、複数人で開発をするような現場であればこのようなビルドツールは必須の存在と言えるでしょう。



3.Mavenのインストール方法


それでは、実際にMavenをインストールしてみましょう。

今回は、MavenをWindows PCへインストールする方法を紹介します。

①Mavenのダウンロード

まずは、Mavenのファイルをダウンロードしましょう。

Apache Mavenのサイトへアクセスします。


左側のメニューから「Download」を選択します。

Apache Mavenのサイトで「Download」がハイライトされている

ページをスクロールし、「Files」の中から「Binary Zip archive」の「Link」の項目を選択し、ダウンロードします。

Downloadページ内「Files」の、「Binary Zip archive」「Link」の項目がハイライトされている

以下のように、「~bin.zip」がダウンロードできていることを確認しましょう。

エクスプローラーに「~bin.zip」のファイルがダウンロードされている

②Mavenのインストール

Mavenのバイナリをダウンロードしたら、zipファイルを解凍します。

今回は、説明のためにCドライブ直下に解凍します。

ローカルディスクに「~bin.zip」を解凍したファイルが表示されている

解凍したフォルダを確認し、以下のように解凍されていることを確認しましょう。

解凍したファイルの中身が表示されている

③システムパスの設定

ファイルの解凍が完了したら、システムのパスにMavenを追加するため、「システム環境変数の編集」を開きましょう。


Cortanaに「path」と入力することで、簡単に検索できます。

Cortanaにpathと入力し、「システム環境変数」項目が出てきた画面

システムのプロパティが表示されるので、「環境変数」をクリックします。

システムのプロパティ内の「環境変数」がハイライトされている

環境変数のダイアログが表示されますので、「システム環境変数」の「Path」をダブルクリックします。(ユーザー環境変数ではないため注意しましょう。)

「システム環境変数」の「Path」がハイライトされている

以下のように、パスの一覧にMavenのパスを指定します。

このとき、パスの最後に「\bin」を追加することに気を付けてください。

環境変数名の編集画面で、解凍したファイルのパスを入力

④インストール確認

ここまで終了したら、実際にMavenが使えることを確認しましょう。

PowerShellを起動し、以下のコマンドを実行します。

mvn -v

これで、以下のように表示されればインストールは完了です。

> mvn -v
Apache Maven 3.8.5 (3599d3414f046de2324203b78ddcf9b5e4388aa0)
Maven home: C:\apache-maven-3.8.5
Java version: 18.0.1.1, vendor: Oracle Corporation, runtime: C:\Program Files\Java\jdk-18.0.1.1
Default locale: ja_JP, platform encoding: UTF-8
OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"




4.Mavenの設定方法

インストールが完了したところで、Mavenの細かい設定方法を紹介します。
必ず設定する必要はありませんが、業務で利用する際には有用な場合もあるので覚えておくと良いでしょう。


Mavenの設定は、インストール先の「conf」フォルダにある「settings.xml」を編集します。

①ローカルリポジトリの設定

Mavenでは、プロジェクトで利用するライブラリを「リポジトリ」内で管理しています。


リポジトリには、大きく分けると「セントラルリポジトリ」、「プライベートリポジトリ」そして「ローカルリポジトリ」が存在します。

名称説明
セントラルリポジトリMavenが一般公開しているリポジトリ
プライベートリポジトリ社内にのみ公開するリポジトリ
ローカルリポジトリPCに保管しているリポジトリ
リポジトリのイメージ図

Javaプロジェクトをビルドする場合、必要なライブラリが「ローカルリポジトリ」にあるかをまずは確認しましょう。


ローカルリポジトリにライブラリが存在する場合には、そこからJavaプロジェクトへライブラリをロードします。


ローカルリポジトリにライブラリが存在しない場合には、セントラルリポジトリまたはプライベートリポジトリから、ローカルリポジトリへライブラリをダウンロードしたうえで、プロジェクトへライブラリをロードします。

デフォルトのローカルリポジトリの場所を変更するには

使用するライブラリを一度ローカルリポジトリへダウンロードする関係上、Mavenを長く利用していくと「ローカルリポジトリ」が肥大化してしまいがち。


そのため、Cドライブに空きが少ない場合には、ローカルリポジトリの場所にほかのドライブを指定するとよいでしょう。


今回は、例として「D:\maven_repo」を指定する方法を紹介します。

  <!-- localRepository
   | The path to the local repository maven will use to store artifacts.
   |
   | Default: ${user.home}/.m2/repository
  <localRepository>/path/to/local/repo</localRepository>

  <!-- localRepository
   | The path to the local repository maven will use to store artifacts.
   |
   | Default: ${user.home}/.m2/repository
  -->
  <!-- ファイルパスを指定 -->
  <localRepository>D:\maven_repo</localRepository>

②プロキシの設定

企業によっては、外部との通信にプロキシを設定している場合もあります。


プロキシが設定されているネットワーク環境下でMavenを利用したい場合には、設定ファイルにプロキシの情報を記述する必要があります。

  <!-- proxies
   | This is a list of proxies which can be used on this machine to connect to the network.
   | Unless otherwise specified (by system property or command-line switch), the first proxy
   | specification in this list marked as active will be used.
   |-->
  <proxies>
    <!-- proxy
     | Specification for one proxy, to be used in connecting to the network.
     |
    <proxy>
      <id>optional</id>
      <active>true</active>
      <protocol>http</protocol>
      <username>proxyuser</username>
      <password>proxypass</password>
      <host>proxy.host.net</host>
      <port>80</port>
      <nonProxyHosts>local.net|some.host.com</nonProxyHosts>
    </proxy>
    -->
  </proxies>

  <!-- proxies
   | This is a list of proxies which can be used on this machine to connect to the network.
   | Unless otherwise specified (by system property or command-line switch), the first proxy
   | specification in this list marked as active will be used.
   |-->
  <proxies>
    <!-- proxy
     | Specification for one proxy, to be used in connecting to the network.
     | -->
    <proxy>
      <id>local server</id> <!-- 任意の設定名 -->
      <active>true</active>
      <protocol>http</protocol> <!-- プロキシの種類を入力 -->
      <username>user</username> <!-- プロキシへアクセスするユーザーIDを入力(不要な場合には空) -->
      <password>proxypass</password> <!-- プロキシへアクセスするパスワードを入力(不要な場合には空) -->
      <host>proxy.host.net</host> <!-- プロキシサーバーのアドレス -->
      <port>80</port> <!-- プロキシサーバーのポート -->
      <nonProxyHosts>local.net|some.host.com</nonProxyHosts> <!-- プロキシを通さない通信先 -->
    </proxy>
  </proxies>

この時、「nonProxyHosts」はプロキシを通さないアドレスを指定します。

例えば、


・セントラルリポジトリへのアクセスはプロキシを通す必要がある

・プライベートリポジトリは社内にあるためプロキシが不要である

という場合には、プライベートリポジトリのアドレスを「nonProxyHosts」に指定します。

5.Eclipseとの連携方法


本記事を読んでいる方の多くは開発環境として「Eclipse」を利用していることでしょう。Mavenのインストールができたところで、EclipseからMavenを使う方法を紹介します。

①Mavenプラグインのインストール

EclipseからMavenを利用するためには、「Maven(m2e)プラグイン」が必要です。


最新のEcliseを使用しているのであれば、標準でMavenを利用できます。
Mavenプラグインがインストールされているか確認しましょう。


「ヘルプ」から「Eclipse IDEについて」を選択します。

Eclipseのヘルプ内の「Eclipse IDEについて」がハイライトされている

インストール済みのプラグイン一覧が表示されるので、以下のアイコンが含まれていることを確認しましょう。

プラグイン一覧の中の、右下に「m2」と書かれたアイコンがハイライトされている

② Mavenプラグインの設定

もし「settings.xml」を修正しMavenの設定を変更している場合、その設定をEclipseに認識させる必要があります。

※settings.xmlを変更していない場合、この手順は不要です。


「ウィンドウ」>「 設定」を選択し、設定画面を開きます。


「Maven」>「ユーザー設定」を開き、以下のようにsettings.xmlを指定することでMavenの設定を適用できます。

Mavenのユーザー設定に、「解凍したファイルのパス/conf/settings.xml」を指定している

6.Mavenを使ってみよう


それでは、実際にEclipeとMavenを使ってJavaプロジェクトを作成してみましょう。

①Mavenプロジェクトを作成する

まずは、EclipseからMavenに対応したプロジェクトを作成しましょう。


「新規」>「その他」を選択します。

Eclipseのファイルタブの「新規」、「その他」が選択されている

ウィザードが表示されますので、「Maven プロジェクト」を選択し、「次へ」を選択します。

「ウィザードを選択」の画面で「Mavenプロジェクト」が選択されている

「シンプルなプロジェクトの作成」を選択し、「次へ」を選択します。

新規Mavenプロジェクト画面で「シンプルなプロジェクトの作成」がハイライトされている

プロジェクトの情報を入力しましょう。

ここでは、例として以下の情報を入力します。

項目名説明入力内容
グループID主に企業名やチームの名称jp.co.trainocamp.samples
アーティファクトIDJavaプロジェクトの名称maven
バージョンそのプロジェクトのバージョン0.1.1-SNAPSHOT(デフォルト)
パッケージングビルド結果の出力形式(jarまたはwarを入力)jar

ここで、グループIDとアーティファクトIDを合わせたものが、そのプロジェクトのパッケージとなります。そのため、このプロジェクトの場合は「jp.co.trainocamp.samples.maven」がパッケージ名です。


入力が終わったら「完了」を選択します。

新規Mavenプロジェクト画面で完了を選択している

以下のように、プロジェクトが作成されていれば準備完了です。

EclipseにMavenプロジェクトが追加されている

②pom.xmlを編集する

次に、ライブラリを利用するための設定をpom.xmlへ追記します。

追加するのは以下の2点です。

Javaのバージョンを指定

まずは、プロジェクトで使用するJavaのバージョンを指定します。
以下の例では、Java17を使用するように指定しています。

<!-- Javaのバージョンを指定 -->
<properties>
    <maven.compiler.source>17</maven.compiler.source>
    <maven.compiler.target>17</maven.compiler.target>
</properties>

Jacksonのパッケージを指定

次に、利用するライブラリの情報を記載します。

記載する内容は、Mavenのリポジトリを参照します。

ページ内のコードをコピペするだけで利用できますので、悩む必要もありません。

Jackson-coreのページのMavenタブに記述されているコードがハイライトされている
<!-- JSONを扱うためのライブラリ -->
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.13.3</version>
</dependency>

最終的なpom.xml

最終的に以下のように編集できていることを確認しましょう。

<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>jo.co.trainocamp.samples</groupId>
	<artifactId>maven</artifactId>
	<version>0.0.1-SNAPSHOT</version>

	<!-- Javaのバージョンを指定 -->
	<properties>
		<maven.compiler.source>17</maven.compiler.source>
    	<maven.compiler.target>17</maven.compiler.target>
	</properties>
	<dependencies>
		<!-- JSONを扱うためのライブラリ -->
		<dependency>
			<groupId>com.fasterxml.jackson.core</groupId>
			<artifactId>jackson-databind</artifactId>
			<version>2.13.1</version>
		</dependency>
	</dependencies>
</project>

③ライブラリのインストール

Mavenをインストールする際には、コマンドを実行する必要があるのですが、Eclipseの場合にはすべてGUIで実行できます。


例えば、「実行」>「Maven install」と選択することで依存関係をインストールします。

Mavenプロジェクトを右クリックし「実行」から「Maven install」を選択している

以下のように「BUILD SUCCESS」と表示されればインストール完了です。

コンソールに「BUILD SUCCESS」が表示されている

「ソース・オプション5は現在サポートされていません。」と出た場合には?

以下のように、エラーとなってインストールに失敗する場合には、Eclipseの設定を変更しましょう。

コンソールに「ソース・オプション5は現在サポートされていません。」と表示されている

プロジェクトを右クリックし、「プロパティー」を選択します。

Mavenプロジェクトを右クリックし「プロパティー」を選択している

「Javaコンパイラー」を選択し、「プロジェクト固有の設定を可能にする」のチェックを外します。

Mavenのプロパティ画面内「Javaコンパイラー」の「プロジェクト固有の設定を可能にする」のチェックが外されている

この状態で再度「Mavenインストール」を実行することで、正常にインストールが完了します。

コンソールに「BUILD SUCCESS」が表示されている

④プログラムを作成して実行

それでは、インストールしたライブラリを利用するプログラムを実行してみましょう。

「jp.co.trainocamp.samples.maven」のパッケージの中に以下のようなJavaプログラムを作成します。

package jp.co.trainocamp.samples.maven;

import java.io.Serializable;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;

public class Main {

	/**
	 * JSONを作るためのJavaBeansクラス
	 */
	private static class TestObject implements Serializable{
		
		/** 氏名 */
		private String name;
		
		/** 電話番号 */
		private String tel;
		
		/**
		 * 氏名のgetter
		 * @return name 氏名
		 */
		public String getName() {
			return name;
		}
		/**
		 * 氏名のsetter
		 * @param name 氏名
		 */
		public void setName(String name) {
			this.name = name;
		}
		/**
		 * 電話番号のgetter
		 * @return tel 電話番号
		 */
		public String getTel() {
			return tel;
		}
		/**
		 * 電話番号のsetter
		 * @param tel 電話番号
		 */
		public void setTel(String tel) {
			this.tel = tel;
		}
	}
	
	public static void main(String[] args) throws JsonProcessingException{
		//JSON化するBeanを生成
		TestObject obj = new TestObject();
		obj.setName("田中 太郎");
		obj.setTel("03-1234-5678");
		
		// BeanをJSONに変換
		ObjectMapper mapper = new ObjectMapper();
		String json = mapper.writeValueAsString(obj);
		
		// 出力されたJSON文字列を表示
		System.out.println(json);
		
	}
}

作成したプログラムを実行してみましょう。

以下のように出力されれば完了です。

{"name":"田中 太郎","tel":"03-1234-5678"}




7.よく使うmavenコマンド


最後に、Mavenを採用したプロジェクトにおいて利用頻度の高いコマンドを紹介します。


EclipseではGUIから操作しましたが、実は内部的には対応する以下のコマンドを実行しているのです。実行するコマンドと意味も、あわせて覚えておきましょう。

①install

依存関係のライブラリをインストールする際には「install」コマンドを利用します。

mvn install

mvn install

②test

作成したJUnitの単体テストを実行する場合には「test」コマンドを利用します。

mvn test

実際にJUnitを利用したテストの方法についてはこちらの記事を参照してみてください。

③compile

javaファイルをコンパイルし.classファイルを作成する場合には、compileコマンドを実行します。

mvn compile

④package

成果物としてjarやwarといったファイルを作成する際に実行するのが「package」コマンドです。

mvn package

⑤deploy

ビルドの成果物をサーバー等へ公開する際に利用するのが「deploy」コマンドです。

mvn deploy

⑥clean

プロジェクトをクリーンし、ビルド結果を削除する場合には「clean」コマンドを利用します。 


ビルドに失敗した場合や、うまく動かない場合にはこのコマンドを利用するようにしましょう。

mvn clean




この記事をシェア