Maven on Java 21 & Devuan 5 (Debian 12): インストール (手動で)
Tags: maven, java, openjdk, devuan
Published: 2023-10-15 13:24:58

## はじめに

[Apache](https://apache.org/) [Maven](https://maven.apache.org/) は広く使われているオープンソースのソフトウェアです。[Java](https://dev.java/) のプロジェクトの (さらには他のプログラミング言語のものでも) ビルドおよび管理を行えます。[Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) でライセンスされています。

[Devuan](https://www.devuan.org/) [5 Daedalus](https://www.devuan.org/os/announce/daedalus-release-announce-2023-08-14) は [Debian](https://www.debian.org/) [12 bookworm](https://www.debian.org/releases/bookworm/) をもとにつくられている Linux ディストロです。Devuan を使っている場合、[パッケージ管理](https://packages.debian.org/bookworm/) の恩恵で、Maven のインストール自体は難しいものではありません。しかしながら常に最新のものが使えるとは限りません。実際、Debian 12 から提供されている Maven は今日時点で [3.8](https://maven.apache.org/docs/3.8.1/release-notes.html) です。[3.9](https://maven.apache.org/docs/3.9.0/release-notes.html) ではありません。まぁ、とは言うものの、それは重要なことでしょうか ? おそらくそうでは無いですよね。

私は [一つ前の記事](https://scqr.net/ja/blog/2023/10/15/java-21-on-devuan-5-debian-12-install-manually/index.html) で [OpenJDK](https://openjdk.org/) 最新の [21](https://jdk.java.net/21/) を Devuan 5 に手動でインストールしました。今度はここで Maven を手動でインストールする方法を紹介します。
もちろん `apt install maven` を実行する方がラクだよなぁと思いつつ、です 🫣

### 環境

- OS: Devuan 5 Daedalus
  - ベースは Debian 12 bookworm
- App Engine: OpenJDK 21
- プロジェクトのビルドおよび管理: Apache Maven [3.9.5](https://maven.apache.org/docs/3.9.5/release-notes.html)

## チュートリアル

前提として、`PATH` に Java 21 の `bin` が含まれていて、それは他のバージョンの Java、例えば (一つ前の LTS である) 17 等よりも先に現れるものとします。

### Apache Maven パッケージの取得

公式 Web サイトが出発点になります: https://maven.apache.org/download.cgi

コマンドでバイナリを取得します。例えば以下のようにすれば良いでしょう:

```console
$ curl -LO https://dlcdn.apache.org/maven/maven-3/3.9.5/binaries/apache-maven-3.9.5-bin.tar.gz
```

サーバーとローカルのチェックサムを比較することで、ダウンロード結果を検証できます。一例ですが、以下のコマンドで実施できます:

```console
$ echo "$(curl -s https://downloads.apache.org/maven/maven-3/3.9.5/binaries/apache-maven-3.9.5-bin.tar.gz.sha512) apache-maven-3.9.5-bin.tar.gz" | \
      sha512sum -c
apache-maven-3.9.5-bin.tar.gz: OK
```

上は、サーバーのチェックサムがローカルと一致することが確認できた、ということを意味します:

```console
$ # ダウンロードしたファイルのチェックサム
$ sha512sum apache-maven-3.9.5-bin.tar.gz
4810523ba025104106567d8a15a8aa19db35068c8c8be19e30b219a1d7e83bcab96124bf86dc424b1cd3c5edba25d69ec0b31751c136f88975d15406cab3842b  apache-maven-3.9.5-bin.tar.gz
```

### ファイル群の配置

展開します:

```console
$ tar xzf apache-maven-3.9.5-bin.tar.gz
```

結果は以下の通りでした:

```console
$ ls {.,apache-maven-3.9.5}
.:
apache-maven-3.9.5/            apache-maven-3.9.5-bin.tar.gz
(...)

apache-maven-3.9.5:
bin/  boot/  conf/  lib/  LICENSE  NOTICE  README.txt
```

`apache-maven-3.9.5` ディレクトリを手に入れました。中に `bin` その他が含まれています 👍

### 環境変数の設定

`PATH` を更新して、Maven の `bin` を追加します:

```console
$ # bash の場合
$ export PATH=$(readlink -f ./apache-maven-3.9.5/bin):$PATH
$ # fish の場合
$ #set -x PATH $(readlink -f ./apache-maven-3.9.5/bin/):$PATH
```

## おわりに

これで Apache Maven 環境を構築できました:

```console
$ mvn --version
Maven home: /(...)/apache-maven-3.9.5
Java version: 21, vendor: Oracle Corporation, runtime: /(...)/jdk-21
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "6.1.0-13-amd64", arch: "amd64", family: "unix"
```

サンプルのプロジェクトをつくってみましょう。名前は "maven-example-01" にします。以下のように実行しましょう:

```console
$ # プロジェクトの作成
$ mvn archetype:generate \
      -DarchetypeArtifactId=maven-archetype-quickstart \
      -DinteractiveMode=false \
      -DgroupId=com.myexample.app \
      -DartifactId=maven-example-01

$ # ファイルが生成される
$ cat src/main/java/com/myexample/app/App.java
package com.myexample.app;

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

$ # ビルド
$ mvn package

$ # 実行
$ java -cp \
      target/maven-example-01-1.0-SNAPSHOT.jar \
      com.myexample.app.App
Hello World!
```

イェイ 🙌