Maven を Ubuntu にインストールして Hello World する

# Maven を Ubuntu にインストールして Hello World する

こんにちは、@studio_meowtoon です。今回は、WSL の Ubuntu 24.04 に Maven をインストールする手順と、Hello World を出力する方法を紹介します。
![maven_on_ubuntu.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3206449/c09c56bd-626e-ab11-73ef-4a6d985c4b55.png)

## 目的

Windows 11 の Linux でクラウド開発します。

こちらから記事の一覧がご覧いただけます。

https://qiita.com/studio_meowtoon/items/6119ab05d8b13527efd8

## 実現すること

ローカル環境 (Ubuntu) に Java のプログラムをビルド、実行するツール [Maven](https://maven.apache.org/) をインストールします。  

## 技術トピック

### Maven とは？  

<details>
<summary>こちらを展開してご覧いただけます。</summary>

### [Maven (メイヴン)](https://maven.apache.org/)

Maven は、Java プロジェクトをビルドするためのオープンソースのツールです。  

以下は、Maven の主な特徴とメリットです。

|特徴|
|:--|
|プロジェクトの構造と依存関係を XML ファイルに定義し、ビルドプロセスを自動化できます。|
|プロジェクトの依存関係を自動的に解決し、必要なライブラリをダウンロードしてビルドに含めることができます。|
|ビルド時にテストを自動実行できます。|

|メリット|
|:--|
|ビルドプロセスの自動化により、ビルドの一貫性を確保できます。|
|依存関係の解決とライブラリのダウンロードを自動化することにより、開発者が手動でライブラリをダウンロードする必要がなくなります。|
|標準的なディレクトリ構造と命名規則を使用するため、他の Maven プロジェクトとの親和性が高くなります。|
|さまざまなプラグインを提供しており、ビルドプロセスに組み込むことができるため、柔軟性があります。|

:::note warn
Java プロジェクトをビルドするツールとして、新しい [**Gradle**](https://gradle.org/) というツールがあります。Gradle も Maven と同様に、[**Maven Central リポジトリ**](https://repo.maven.apache.org/maven2/)からライブラリやプラグインをダウンロードします。Maven Central に登録されているライブラリのメタデータは、**Maven POM** と呼ばれる **XML 形式**のファイルで提供されています。

Gradle をより理解する段階において、**Maven の知識が必要になる場合があります**。そのため、将来的に Gradle を使うかどうかにかかわらず、最初から Maven を学ぶことは効率的です。

一方、Gradle を否定するつもりはありません。実際、**Gradle を使用することで Maven ではできない複雑なカスタマイズ処理**を行うことができます。Maven では対応できない複雑な問題が発生した場合は、Gradle を使用することも選択肢の1つとなります。
:::

</details>

## 開発環境

+ Windows 11 Home 23H2 を使用しています。  

:::note info
[WSL](https://learn.microsoft.com/ja-jp/windows/wsl/about) の Ubuntu を操作しますので macOS の方も参考にして頂けます。
:::

<details>

WSL (Microsoft Store アプリ版) [※ こちらの関連記事からインストール方法をご確認いただけます](https://qiita.com/studio_meowtoon/items/cd0c4a607d451dbf5430)

```sh
> wsl --version
WSL バージョン: 2.2.4.0
カーネル バージョン: 5.15.153.1-2
WSLg バージョン: 1.0.61
```

Ubuntu [※ こちらの関連記事からインストール方法をご確認いただけます](https://qiita.com/studio_meowtoon/items/cd0c4a607d451dbf5430)

```sh
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 24.04 LTS
Release:        24.04
Codename:       noble
```

Java JDK [※ こちらの関連記事からインストール方法をご確認いただけます](https://qiita.com/studio_meowtoon/items/4d11e94a2389758759cd)

```sh
$ java -version
openjdk version "11.0.24" 2024-07-16
OpenJDK Runtime Environment (build 11.0.24+8-post-Ubuntu-1ubuntu324.04.1)
OpenJDK 64-Bit Server VM (build 11.0.24+8-post-Ubuntu-1ubuntu324.04.1, mixed mode, sharing)
```

</details>

:::note warn
この記事では基本的に Ubuntu のターミナルで操作を行います。**Vim を使用してコピペする方法**をはじめて学ぶ人のために、以下の記事で手順を紹介しています。ぜひ挑戦してみてください。
:::

https://qiita.com/studio_meowtoon/items/7771ad48676926e41463

## Maven インストール

存在を確認します。

```sh
$ mvn -version
コマンド 'mvn' が見つかりません。次の方法でインストールできます:
※ 以下省略
```

インストールします。

```sh
$ sudo apt update
$ sudo apt install maven
```

:::note warn
※ アンインストールする場合のコマンドです。  

```sh
$ sudo apt remove maven
```

:::

バージョンを確認します。

```sh
$ mvn -version
Apache Maven 3.8.7
Maven home: /usr/share/maven
Java version: 11.0.23, vendor: Ubuntu, runtime: /usr/lib/jvm/java-11-openjdk-amd64
Default locale: ja_JP, platform encoding: UTF-8
OS name: "linux", version: "5.15.153.1-microsoft-standard-wsl2", arch: "amd64", family: "unix"
```

Maven を Ubuntu にインストールすることができました。  

:::note info
JDK をインストールする際に、**JAVA_HOME** 環境変数を設定しています。Maven はこの環境変数を参照して JDK のパスを自動的に認識できます。
:::

## Hello World を表示する手順

### プロジェクトの作成

プロジェクトフォルダーを作成します。  
※ ~/tmp/hello-maven をプロジェクトフォルダーとします。

```sh
$ mkdir -p ~/tmp/hello-maven
$ cd ~/tmp/hello-maven
```

Java ソースファイルを作成します。

```sh
$ mkdir -p src/main/java/com/example
$ vim src/main/java/com/example/HelloWorld.java
```

ファイルの内容  
※ パッケージを "com.example" としています。

```java:HelloWorld.java
package com.example;

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello World!");
    }
}
```

pom.xml ファイルを作成します。

```sh
$ vim pom.xml
```

ファイルの内容

```xml: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>com.example</groupId>
    <artifactId>hello-maven</artifactId>
    <version>1.0</version>
    <name>hello-maven</name>

    <properties>
        <java.version>11</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.0</version>
                <configuration>
                    <source>${java.version}</source>
                    <target>${java.version}</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>
```

:::note info
**pom.xml** は、Java プロジェクトを Maven でビルドする際に必要な依存関係や設定情報などを記述する XML 形式のファイルです。
:::

各項目の内容は以下のとおりです。

|項目|内容|
|:--|:--|
|groupId|プロジェクトのグループIDを指定します。|
|artifactId|プロジェクトのアーティファクトIDを指定します。|
|version|プロジェクトのバージョンを指定します。|
|name|プロジェクトの名前を指定します。|
|properties|ビルドプロセス中に使用するプロパティを定義します。|
|build|ビルドプロセスの設定を定義します。ここでは、コンパイルに必要なプラグイン (maven-compiler-plugin) を定義しています。|

プロジェクトのファイル構成を表示してみます。

```sh
$ tree
.
├── pom.xml
├── src
│   └── main
│       └── java
│           └── com
│               └── example
│                   └── HelloWorld.java
```

### プロジェクトのビルドと実行

ビルドします。  
※ target/hello-maven-1.0.jar ファイルが作成されます。

```sh
$ mvn clean package
```

:::note info
Maven を使用して Java プロジェクトをビルドするためのコマンドです。

|フェーズ|内容|
|:--|:--|
|clean|ビルド前に前回のビルドで生成されたファイルを削除します。|
|package|プロジェクトのソースコードからコンパイルされたクラスファイルを含む jar ファイルが作成されます。|

この jar ファイルには、依存関係のライブラリやリソースファイルも含まれます。ビルドされた jar ファイルは、**target ディレクトリ**内に生成されます。
:::

実行します。

```sh
$ java -classpath target/hello-maven-1.0.jar com.example.HelloWorld
```

:::note info
**java** コマンドで、**target/hello-maven-1.0.jar** というファイルをクラスパスに含め、**com.example.HelloWorld** という Java クラスを実行しています。
:::

出力を確認します。

```sh
Hello World!
```

ターミナルに "Hello World!" と表示することができました。  

## まとめ

+ Ubuntu に Maven をインストールして、シンプルな Java 開発環境を構築することができました。

:::note warn
実際の開発では、軽量なテキストエディターである **VS Code** や、**IDE (統合開発環境)** を使用して Java プログラムを開発することが一般的です。しかし、それらの開発ツールのバックエンドには、通常 **Maven** (または **Gradle**) が使われます。Maven を直接コマンドラインから使用することで、Java プロジェクト開発の基本を理解できます。
:::

どうでしたか？　Window 11 の WSL Ubuntu に、Maven を使用した Java の開発環境を手軽に構築できます。ぜひお試しください。今後も Java の開発環境などを紹介しますので、ぜひお楽しみにしてください。

## 推奨コンテンツ

https://qiita.com/studio_meowtoon/items/37ac0082a3228e4de570