Maven on Java 21 and Devuan 5 (Debian 12): Install manually


Summary

Apache Maven is a popular open source software to build and manage projects of Java (and also other programming languages), licensed under Apache-2.0.

With Devuan 5 Daedalus based on Debian 12 bookworm, it is easy to use it thanks to their packages management. However, it is not always the latest. Actually, Maven Debian 12 offers is currently 3.8 instead of 3.9. Well, is it a big problem ? Probably, no.

In my previous post, I installed OpenJDK 21, the latest, manually on Devuan 5. Here, I will show how to install Maven manually, too. Of course, it is easier to run apt install maven 🫣

Environment

  • OS: Devuan 5 Daedalus
    • based on Debian 12
  • App Engine: OpenJDK 21
  • Project Build and Management: Apache Maven 3.9.5

Tutorial

Suppose that your PATH includes Java 21 bin which appears before those of other Java versions such as 17 (the previous LTS).

Get Apache Maven package

Visit: https://maven.apache.org/download.cgi

Get the binary with the command line, for example:

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

You can verify the download by comparing the checksums between the server and the local. Use the command lines below, for example:

$ 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

It means it was confirmed that the server checksum was equal to the local one:

$ # checksum of the downloaded file
$ sha512sum apache-maven-3.9.5-bin.tar.gz
4810523ba025104106567d8a15a8aa19db35068c8c8be19e30b219a1d7e83bcab96124bf86dc424b1cd3c5edba25d69ec0b31751c136f88975d15406cab3842b  apache-maven-3.9.5-bin.tar.gz

Place files

Extract it:

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

The result is as below:

$ 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

Now you have apache-maven-3.9.5 directory which contains bin etc. 👍

Set environment variables

Update PATH to include Maven bin:

$ # case bash
$ export PATH=$(readlink -f ./apache-maven-3.9.5/bin):$PATH
$ # case fish
$ #set -x PATH $(readlink -f ./apache-maven-3.9.5/bin/):$PATH

Conclusion

Now Apache Maven is in your hands:

$ 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"

Let’s create an example project named “maven-example-01” and run it:

$ # create a project
$ mvn archetype:generate \
      -DarchetypeArtifactId=maven-archetype-quickstart \
      -DinteractiveMode=false \
      -DgroupId=com.myexample.app \
      -DartifactId=maven-example-01

$ # files are generated
$ 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!" );
    }
}

$ # build it
$ mvn package

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

Yay 🙌


Comments or feedbacks are welcomed and appreciated.