Apache MavenをMacにインストールしてHello World

前から気になっていたMavenの使い勝手を試そうと、まずはMacにインストールしてHello Worldを表示してみました。

  • Apache Mavenとは
  • Apache Mavenのインストール
    • 事前準備
    • インストール
    • Hello World

Apache Mavenとは


Apache Mavenとは、Javaソースコードをビルドするためのオープンソースソフトウェア(OSS)です。
ソースコードのコンパイルやユニットテストに加え、アーティファクト(WAR, EARなど)の生成が可能です。

Apache Mavenのインストール


事前準備


Apache Mavenのインストールを始める前に、以下の準備を行います。

  • Apache Mavenのダウンロード
  • JAVA_HOMEの設定

Apache Mavenのダウンロード


公式サイトから、Apache Mavenのモジュールをダウンロードします。本記事では、「Binary tar.gz archive」を選択します。

JAVA_HOMEの設定


インストールするには、JAVA_HOMEの設定が必要です。以下のように設定済みです。

$ echo $JAVA_HOME
/Library/Java/JavaVirtualMachines/jdk1.8.0_77.jdk/Contents/Home

インストール


ファイルの解凍


以下のコマンドでファイルを解凍します。

$ tar xzvf apache-maven-3.6.3-bin.tar

解凍後に作成されるディレクトリを/opt配下に移動します。

$ sudo mv apache-maven-3.6.3 /opt/

環境パスへの追加


コマンド実行できるように、以下のコマンドでPATH環境変数に/opt/apache-maven-3.6.3/binを追加します。

$ export PATH=/opt/apache-maven-3.6.3/bin:$PATH

mvnコマンドが実行できることを確認します。

$ mvn -v
Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)
Maven home: /opt/apache-maven-3.6.3
Java version: 1.8.0_77, vendor: Oracle Corporation, runtime: /Library/Java/JavaVirtualMachines/jdk1.8.0_77.jdk/Contents/Home/jre
Default locale: ja_JP, platform encoding: UTF-8
OS name: "mac os x", version: "10.15.5", arch: "x86_64", family: "mac"

Hello World


Apache Mavenを使って、Javaプログラムのコンパイルを試します。

ソースコードの作成


以下のコマンドでJavaプログラムの雛形を作成します。

$ mkdir hello-world
$ cd hello-world/
$ mvn archetype:generate \
   -DgroupId=com.example \
   -DartifactId=hello-world

途中で質問されますが、全てEnterでデフォルトを選択すると、以下のようにBUILD SUCCESSが表示されます。

[INFO] ----------------------------------------------------------------------------
[INFO] Using following parameters for creating project from Archetype: maven-archetype-quickstart:1.4
[INFO] ----------------------------------------------------------------------------
[INFO] Parameter: groupId, Value: com.example
[INFO] Parameter: artifactId, Value: hello-world
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] Parameter: package, Value: com.example
[INFO] Parameter: packageInPathFormat, Value: com/example
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] Parameter: package, Value: com.example
[INFO] Parameter: groupId, Value: com.example
[INFO] Parameter: artifactId, Value: hello-world
[INFO] Project created from Archetype in dir: /Users/XXX/Downloads/hello-world/hello-world
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  36.709 s
[INFO] Finished at: 2020-09-28T00:53:14+09:00
[INFO] ------------------------------------------------------------------------

以下のコマンドで確認すると、ディレクトリ構造が作成されていることがわかります。

$ tree
.
└── hello-world
    ├── pom.xml
    └── src
        ├── main
        │   └── java
        │       └── com
        │           └── example
        │               └── App.java
        └── test
            └── java
                └── com
                    └── example
                        └── AppTest.java

10 directories, 3 files

App.javaを確認すると、デフォルトでHello Worldプログラムのソースコードであることがわかります。今回はこのまま使用します。

$ cat hello-world/src/main/java/com/example/App.java 
package com.example;

/**
 * Hello world!
 *
 */
public class App 
{
    public static void main( String[] args )
    {
        System.out.println( "Hello World!" );
    }
}

Jarファイルを作成する


作成したソースコードをJarファイルに圧縮します。

$ cd hello-world/
$ mvn package
[INFO] Scanning for projects...
[INFO] 
[INFO] ----------------------< com.example:hello-world >-----------------------
[INFO] Building hello-world 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
〜〜省略〜〜
[INFO] Building jar: /Users/XXX/Downloads/hello-world/hello-world/target/hello-world-1.0-SNAPSHOT.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  53.662 s
[INFO] Finished at: 2020-09-28T01:07:29+09:00
[INFO] ------------------------------------------------------------------------

targetディレクトリ配下にJarファイルが作成されていることがわかります。

$ tree
.
├── pom.xml
├── src
│   ├── main
│   │   └── java
│   │       └── com
│   │           └── example
│   │               └── App.java
│   └── test
│       └── java
│           └── com
│               └── example
│                   └── AppTest.java
└── target
    ├── classes
    │   └── com
    │       └── example
    │           └── App.class
    ├── generated-sources
    │   └── annotations
    ├── generated-test-sources
    │   └── test-annotations
    ├── hello-world-1.0-SNAPSHOT.jar
    ├── maven-archiver
    │   └── pom.properties
    ├── maven-status
    │   └── maven-compiler-plugin
    │       ├── compile
    │       │   └── default-compile
    │       │       ├── createdFiles.lst
    │       │       └── inputFiles.lst
    │       └── testCompile
    │           └── default-testCompile
    │               ├── createdFiles.lst
    │               └── inputFiles.lst
    ├── surefire-reports
    │   ├── TEST-com.example.AppTest.xml
    │   └── com.example.AppTest.txt
    └── test-classes
        └── com
            └── example
                └── AppTest.class

28 directories, 13 files

実行する


作成したJarファイルを使って、Hello Worldプログラムを実行します。

$ java -cp target/hello-world-1.0-SNAPSHOT.jar com.example.App
Hello World!

以上です。とりあえず要領が分かったので、これから色々と使ってみたいと思います。