Homebrewを使用してApache Mavenを簡単にインストールする方法

Apache Maven
この記事はこんな人にオススメ
  • Apache Mavenに興味のある人
  • Apache Mavenを使用してJavaのビルド管理をしたい人
  • 手軽にApache Mavenをインストールしたい人

どうも、Shinyaです。

この記事では、Homebrewを使用してJavaのビルドツールとして定番のApache Mavenを簡単にインストールする方法について書いていきます。

Apache Mavenの公式バナー。

Apache Mavenは、Java開発を行う際にデファクトスタンダードとなっているビルドツールです。一般的には単純に「Maven」と呼ばれることが多いので、この記事でもこれ以降はMavenと呼びます。

Mavenの優れている点は、使用するライブラリなどの依存性を「POM」と呼ばれるXML形式のファイルで簡単かつ一元的に管理できることです。

Maven登場以前のJavaでは、使用するライブラリのJarを自分でダウンロードしてローカルまたはサーバーの特定のフォルダに直接配置し、それらをひとつひとつJavaプロジェクトのクラスパスに手動で追加してあげる必要がありました。こうした作業の都合上、プロジェクトの規模がスケールアップすればするほど依存関係が複雑になり、ライブラリを配置するフォルダ構造が悪いとプロジェクトの管理が困難になることもありました。また、開発者の熟練度によってはこうした煩雑な作業を正しく行えない問題もありました。

こうした問題に一元的な標準を導入することでJavaのビルド管理に秩序を与えたのがMavenになります。Mavenを使用すると、誰でも簡単にXML形式で依存性の管理を行うことができ、ライブラリのダウンロードからクラスパスへの追加までコンパイル時に自動でやってくれるので、開発者は煩雑な依存性の管理から開放されて開発だけに集中することができます

事前準備

この記事ではMavenをインストールする際にパッケージ管理ツールのHomebrewを使用します。そのため、Homebrewのインストールが終わっていない方は、以下の記事を参考にHomebrewをインストールしてください。

また、インストールしたMavenの動作確認を行うためには、Javaの開発環境としてJDKが必要になります。そのため、JDKのインストールが完了していない方は、以下の記事を参考にOpenJDKのAmazon Corettoをインストールしてみてください。

Mavenをインストールする

それでは早速、Homebrewを使用してMavenをインストールしていきます。

MavenHomebrewでは「maven」という名前でパッケージが登録されているので、コマンドラインで次のbrewコマンドを実行します。

brew install maven

上記のbrewコマンドを実行するとMavenのインストールが始まりますので完了まで待機します。次のような画像の状態になれば、Mavenのインストールは完了です。

次にインストールしたMavenが使用できるようなっているか動作確認してみましょう。コマンドラインで次のmvnコマンドを実行してください。

mvn --version

上記のコマンドを実行して、次の画像のようにインストールしたMavenのバージョン情報が出力されればインストールは問題なく完了しています。

Mavenを使ってビルドしてみる

せっかくMavenをインストールしたので、簡単なJavaのMavenプロジェクトを作成してビルドをしてみましょう。

Mavenプロジェクトを作成

検証用に次のようなMavenプロジェクトを作成しました。

POMファイルに依存性を追加する

Mavenプロジェクトでは、「POM」と呼ばれるXMLファイルにビルドに関する定義を行っていきます。また、Mavenプロジェクトを作成した際に、Mavenプロジェクトの直下に「pom.xml」というファイルが生成されていますので、このファイルに依存性を追加してみましょう。

Mavenなどのビルドツールを使用して依存性を追加する際には、Maven Repositoryを使用して利用可能なライブラリを簡単に調べることができます。

今回は試しにApache Commons Langの依存性を追加してみます。pom.xmlの中にあるdependenciesタグの中に、次のdependencyタグを追加してください。

<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 -->
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.17.0</version>
</dependency>

pom.xmlに上記の依存性を追加した後は次のような状態になっています。

<?xml version="1.0" encoding="UTF-8"?>
<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>dev.shinyakato</groupId>
    <artifactId>demo</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>21</maven.compiler.source>
        <maven.compiler.target>21</maven.compiler.target>
    </properties>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

    <dependencies>
        <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 -->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.17.0</version>
        </dependency>
    </dependencies>
</project>

Mavenでビルドを実行する

次に、POMファイルに追加したライブラリをダウンロードするために、pom.xmlがあるディレクトリでコマンドラインから次のmvnコマンドを実行します。

mvn clean install

上記のコマンドは、mvn clean」と「mvn install」を順番に実行します。

このコマンドでやっていることはとても単純で、mvn clean」で前回ビルドした際に生成されたtargetフォルダのデータを一度削除して、その後にmvn install」でビルドを行いtargetフォルダにビルドデータを生成しています。

上記のコマンドを実行すると以下のような出力結果を確認できます。

[INFO] Scanning for projects...
[INFO] 
[INFO] ------------------------< dev.shinyakato:demo >-------------------------
[INFO] Building demo 1.0-SNAPSHOT
[INFO]   from pom.xml
[INFO] --------------------------------[ jar ]---------------------------------
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/commons/commons-lang3/3.17.0/commons-lang3-3.17.0.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/commons/commons-lang3/3.17.0/commons-lang3-3.17.0.pom (31 kB at 53 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/commons/commons-parent/73/commons-parent-73.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/commons/commons-parent/73/commons-parent-73.pom (78 kB at 441 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/commons/commons-lang3/3.17.0/commons-lang3-3.17.0.jar
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/commons/commons-lang3/3.17.0/commons-lang3-3.17.0.jar (674 kB at 2.7 MB/s)
[INFO] 
[INFO] --- clean:3.2.0:clean (default-clean) @ demo ---
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/commons/commons-parent/42/commons-parent-42.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/commons/commons-parent/42/commons-parent-42.pom (68 kB at 772 kB/s)
[INFO] Deleting /path/demo/target
[INFO] 
[INFO] --- resources:3.3.1:resources (default-resources) @ demo ---
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/commons/commons-parent/52/commons-parent-52.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/commons/commons-parent/52/commons-parent-52.pom (79 kB at 834 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/commons/commons-lang3/3.12.0/commons-lang3-3.12.0.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/commons/commons-lang3/3.12.0/commons-lang3-3.12.0.pom (31 kB at 348 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/commons/commons-lang3/3.12.0/commons-lang3-3.12.0.jar
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/commons/commons-lang3/3.12.0/commons-lang3-3.12.0.jar (587 kB at 3.7 MB/s)
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 0 resource from src/main/resources to target/classes
[INFO] 
[INFO] --- compiler:3.13.0:compile (default-compile) @ demo ---
[INFO] Recompiling the module because of changed source code.
[WARNING] File encoding has not been set, using platform encoding UTF-8, i.e. build is platform dependent!
[INFO] Compiling 1 source file with javac [debug target 17] to target/classes
[INFO] 
[INFO] --- resources:3.3.1:testResources (default-testResources) @ demo ---
[INFO] skip non existing resourceDirectory /path/demo/src/test/resources
[INFO] 
[INFO] --- compiler:3.13.0:testCompile (default-testCompile) @ demo ---
[INFO] Recompiling the module because of changed dependency.
[INFO] 
[INFO] --- surefire:3.2.5:test (default-test) @ demo ---
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/commons/commons-parent/65/commons-parent-65.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/commons/commons-parent/65/commons-parent-65.pom (78 kB at 847 kB/s)
[INFO] 
[INFO] --- jar:3.4.1:jar (default-jar) @ demo ---
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/commons/commons-parent/69/commons-parent-69.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/commons/commons-parent/69/commons-parent-69.pom (77 kB at 802 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/commons/commons-compress/1.26.1/commons-compress-1.26.1.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/commons/commons-compress/1.26.1/commons-compress-1.26.1.pom (22 kB at 249 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/commons/commons-parent/66/commons-parent-66.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/commons/commons-parent/66/commons-parent-66.pom (77 kB at 856 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.pom (31 kB at 351 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/commons/commons-parent/64/commons-parent-64.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/commons/commons-parent/64/commons-parent-64.pom (78 kB at 821 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/commons/commons-compress/1.26.1/commons-compress-1.26.1.jar
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/commons/commons-compress/1.26.1/commons-compress-1.26.1.jar (1.1 MB at 5.7 MB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar (658 kB at 4.3 MB/s)
[INFO] Building jar: /path/demo/target/demo-1.0-SNAPSHOT.jar
[INFO] 
[INFO] --- install:3.1.2:install (default-install) @ demo ---
[INFO] Installing /path/demo/pom.xml to /path/.m2/repository/dev/shinyakato/demo/1.0-SNAPSHOT/demo-1.0-SNAPSHOT.pom
[INFO] Installing /path/demo/target/demo-1.0-SNAPSHOT.jar to /path/.m2/repository/dev/shinyakato/demo/1.0-SNAPSHOT/demo-1.0-SNAPSHOT.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  3.329 s
[INFO] Finished at: yyyy-MM-dd
[INFO] ------------------------------------------------------------------------

Mavenによるビルドが成功し、pom.xmlに追加したライブラリもMaven Repositoryからダウンロードできたことを確認できました。

ダウンロードしたライブラリを使って動作確認してみる

それでは、最後に本当にダウンロードしたライブラリが使用できるようになっているか確認してみましょう。

先ほど新規作成したJavaプログラムを次のように修正しました。

package dev.shinyakato;

import org.apache.commons.lang3.StringUtils;

public class Main {

    public static void main(String[] args) {
        System.out.println(StringUtils.join("Hello", " ", "World", "!"));
    }
}

次に、修正したプログラムを反映したJarが必要なので、もう一度以下のmvnコマンドを実行してください。

mvn clean install

ビルドが完了したら、Mavenプロジェクト直下のtargetフォルダに最新のJarが生成されますので、次のコマンドを実行してJavaプログラムを実行してみます。

java -cp target/demo-1.0-SNAPSHOT.jar dev.shinyakato.Main

上記のコマンドのJarのファイル名と実行クラスのパッケージ名やクラス名は自分が作成したプログラムの名前に置き換えてください。

そうすると、次のようにダウンロードしたライブラリを使用してJavaプログラムを実行できることを確認できます。

Shinya

フリーランス。プログラマー歴10年以上。Amazoned Programmer (Amazon中毒のプログラマー)。

仕事ではJavaとSQLとかを主に使ってアプリケーションを開発しています。BIツールを使用したビッグデータの可視化や解析から、AWSなどのクラウド技術の活用に興味があり、日々研究と研鑽を重ねています。このブログでは日々の学習のアウトプットを投稿していこうと思います。

お気に入りの言葉は「Day 1」と「Data Never Sleeps」。

Shinyaをフォローする
Apache MavenJavaProgrammingTech
Shinyaをフォローする
タイトルとURLをコピーしました