Java 9 Module Hello World!

Java 9 Bootcamp Logo

Was sind Java 9 Module?

Damit eine Java Anwendung läuft muss sichergestellt sein, dass alle beötigten Abhängigkeiten verfügbar sind. Bislang erfolgte dies über den Classpath. Dieses System ist allerdings problematisch und anfällig für Konflikte. Java 9 Module enthalten zusätzliche Informationen, um diese Konflikte zu vermeiden. Das Modulsystem stellt dann sicher, dass die Abhängigkeiten erfüllt sind. Zusätzlich bieten Module neue Möglichkeiten explizit festzulegen, welche Teile des eigenen Codes von aussen zugreifbar sind. Theoretisch hat sich das sicher jeder schon mal angesehen. Aber wie funktioniert das in der Praxis? In dieser Blog-Serie schauen wir uns das Modulsystem Schritt für Schritt an. Als erstes kommt das obligatorische "Hello World!".

Wie baue ich ein Modul?

Dazu verwenden wir nur die Kommandozeilen-Tools. Voraussetzung ist, dass eine Preview-Version von Java 9 installiert ist. Bei mir ist das:

>java -version
java version "9-ea"
Java(TM) SE Runtime Environment (build 9-ea+171)
Java HotSpot(TM) 64-Bit Server VM (build 9-ea+171, mixed mode)

Als Modulname wird in der Regel der Name der Basispackage verwendet. In meinem Fall ist das "de.eppleton.hello". Eine weitere Konvention ist, dass der Quellcode eines Moduls in einem Verzeichnis des selben Namens liegt. Die Klasse HelloWorld.java wird demnach so abgelegt:

src/de.eppleton.hello/de/eppleton/hello/HelloWorld.java

Hier der Inhalt:

package de.eppleton.hello;

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

Zusätzlich zu den Klassen wird eine module-info Datei angelegt. Diese heisst immer "module-info.java" und liegt im Wurzelverzeichnis des Moduls:

src/de.eppleton.hello/module-info.java

Hier der Inhalt der Datei:

 module de.eppleton.hello { }

Damit ist unser minimales Modul fertig. Jetzt müssen wir es kompilieren. Dazu legen wir ein Zielverzeichnis an:

modules/de.eppleton.hello

Nun kompilieren wir das Ganze:

javac -d modules/de.eppleton.hello src/de.eppleton.hello/de/eppleton/hello/HelloWorld.java src/de.eppleton.hello/module-info.java

Das wars, wir haben unser erstes Modul gebaut. Jetzt probieren wir noch, ob es funktioniert:

>java --module-path modules -m de.eppleton.hello/de.eppleton.hello.HelloWorld
Hello modular world!

Auf dem --module-path gibt man alle Verzeichnisse an, in denen Module liegen und mit -m gibt man das main module an. Der Wert hinter dem Schrägstrich ist die auszuführende Main-Klasse.

Im nächsten Teil zeige ich, wie zwei Module miteinander interagieren können.

Besuchen Sie unsere Workshops zum Thema Java 9 um mehr über dieses und weitere neue Features von Java 9 zu erfahren: