Java Projekt-Struktur, Build-Tools, Maven und JavaFX

Wir erklären, die Verzeichnisstruktur von Java-Projekten, erklären und wie Sie Pakete für ein Lernprojekt einsetzen. Das Erstellen eines Projekts mit dem Build-Tool Apache Maven wird erläutert und wir zeigen, wie man mit Maven JavaFX-Projekte erstellt.

Java-Programme werden üblicherweise in Form eines Projekts organisiert. In einer IDE (Integrated Development Environment) starten Sie, indem Sie ein neues Java Projekt erstellen und nicht eine einzelne Datei.

Für unser Beispiel verwenden wir Visual Studio Code. Die Vorgehensweise und der Aufbau eines Projekts ist aber in anderen IDEs ähnlich.

Ein Projekt kann ohne oder mit Hilfe von Build-Tools erstellt werden.

Ohne Build-Tools

VSCode: ein Java-Projekt erstellen

Das neue Projekt enthält zunächst drei Verzeichnisse:

  • .vscode: hier werden Konfigurations-Dateien für das Projekt abgelegt
  • lib: Libraries, enthält zusätzliche Bibliotheken, das Verzeichnis ist erst einmal leer
  • src: Source, hier befinden sich die Quellcode-Dateien (mit der Dateiendung .java). Bereits erstellt ist die Datei „App.java“ mit einem Beispiel-Programm.
VSCode: ein Java-Projekt erstellen

Startet man die App.java, wird ein weiteres Verzeichnis bin angelegt, das das kompilierte Programm „App.class“ enthält.

VSCode: ein Java-Projekt erstellen

Neue Quellcode-Dateien werden im Verzeichnis src gespeichert. Wichtig ist, es darf immer nur eine Datei geben, die die main-Methode enthält. Sie ist der Startpunkt des Programms. Die übrigen Dateien enthalten häufig Klassen oder Interfaces.

Hilfe beim Anlegen neuer Projekt-Dateien erhalten Sie mit der Projekt-Verwaltung links unten in der Seitenleiste. Ein Klick auf das Plus-Symbol neben dem Ordner src öffnet eine Auswahl von Optionen. Wählt man z.B. „Class“, wird eine neue Datei mit der entsprechenden Grundstruktur erstellt.

Das eigentliche Java-Programm wird immer aus der Datei mit der main-Methode kompiliert und gestartet. Die übrigen Dateien im Verzeichnis src werden bei Bedarf automatisch integriert.

Im Gegensatz dazu müssen zusätzliche Bibliotheken explizit mit Hilfe der Anweisung import eingebunden werden.

Pakete

Innerhalb des src Verzeichnisses kann der Code in sogenannten Paketen organisiert werden. Dateien, die sich in einem Paket befinden, werden nicht automatisch eingebunden, sie benötigen import.

Für den Namen des Pakets ist es üblich, die Domain des Herstellers in umgekehrter Reihenfolge zu verwenden. Also z.B. für die Domain „zoom-in.info“ wäre der Paketname „info.zoomin“ (der Bindestrich im Namen ist nicht zulässig). Das ist aber nur wichtig für Programme, die auch veröffentlicht werden sollen. Ansonsten kann man den Namen frei wählen, bis auf einige Vorgaben für die Schreibweise.

Grundsätzlich sind die Pakete eine Art „geschlossenes System“. Die Dateien im Paket können daher durchaus den gleichen Namen tragen, wie die in einem anderen Paket.

Möchte man innerhalb eines Pakets Dateien aus einem anderen Paket einbinden, geschieht dies mit der import-Anweisung. Gibt es dabei gleich lautende Dateinamen in den Paketen, muss der Name des Pakets vorangestellt werden, z.B.

System.out.println(m1_11.HiddenStory.giveNewStory())

also

<Paketname><Klassenname><Methode>

wenn im aktuellen Paket ebenfalls eine Klasse „HiddenStory“ vorhanden ist.

Lernprojekt

Innerhalb eines Pakets kann man auch vollständige Programme, mit einer Datei mit zusätzlicher main-Methode einrichten. So können Sie beispielsweise für einen Programmierkurs ein Projekt für eine Lerneinheit erstellen und darin für jede zu lösende Aufgabe ein Paket mit jeweils eigener main-Methode.

VSCode: ein Java-Projekt erstellen

Mit Build-Tools

Ein Build-Tool ist ein Dienstprogramm, das den Prozess der Erstellung einer ausführbaren Anwendung automatisiert.

Das Tool kümmert sich u.a. um

  • den Download und die Verwaltung der erforderlichen Bibliotheken,
  • das Kompilieren des Quellcodes zu Bytecode
  • die Paketierung des Codes
  • die Durchführung von Tests
  • die Bereitstellung für das Produktivsystem

Für kleinere Projekte kann man all dies von Hand erledigen, für größere aber nicht mehr.

Bekannte Build-Tools für Java sind beispielsweise

  • Maven
  • Gradle

Grundsätzlich ist die Funktionsweise der Tools ähnlich. Für unser Beispiel verwenden wir Maven.

Ein Maven Projekt erstellen

In dem „Extension-Pack for Java“ ist auch die Erweiterung für Maven enthalten. Damit kann man Maven nutzen, ohne es selbst auf dem Computer installieren zu müssen.

Wie gewohnt wählen Sie über die Command-Palette (Strg + Shift + P) „Create Java Project“ und anschließend „Maven“ und dann „No Archetype“. Damit wird eine Verzeichnis-Struktur erstellt mit den Hauptverzeichnissen srcund target.

VSCode: ein Java-Projekt erstellen

Die Datei mit der main-Methode heißt in diesem Maven-Projekt Main.java – nicht App.java – und befindet sich bereits in einem Paket, im Beispiel im Paket zoomin .

Terminal-Fenster mit einem Überblick der Verzeichnis-Struktur

Ganz oben finden Sie die Datei pom.xml (POM: Project Object Model). Sie enthält Informationen über das Projekt und Details zu Konfiguration.

VSCode: ein Java-Projekt erstellen

In ihrer einfachsten Form enthält sie Angaben zum Projekt und die zu verwendende Java-Version im Abschnitt <properties>, hier 22..

<?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>info.zoomin</groupId>
    <artifactId>modul_1</artifactId>
    <version>1.0-SNAPSHOT</version>
​
    <properties>
        <maven.compiler.source>22</maven.compiler.source>
        <maven.compiler.target>22</maven.compiler.target>
    </properties>
​
</project>

Die Datei können Sie bearbeiten und z.B. die Java-Version verändern. Insbesondere legen Sie aber hier fest, welche Bibliotheken eingebunden werden sollen. Maven kümmert sich dann automatisch um den Download.

Archtypes

Beim Einrichten des neuen Maven-Projekts können Sie statt der Basic-Variante – wie oben – einen Archetype nutzen. Ein Archetype ist eine Art Projekt-Vorlage, die es für unterschiedliche Anforderungen gibt.

Einen guten Überblick über eine umfangreiche Strukturierung eines Projekts erhalten Sie mit dem Archetype „maven-archetype-quickstart“.

VSCode: ein Java-Projekt erstellen

Es gibt besondere Archetype-Varianten, die eine Vorlage für spezielle Projekte liefern. So gibt es z.B. Varianten für WebApps oder grafische Benutzeroberflächen. Sehr hilfreich ist ein solcher Archetype für JavaFX.

Ein JavaFX-Projekt mit Maven erstellen

Um ein neues JavaFX-Projekt mit Maven zu beginnen, gibt es zwei Wege:

  • mit dem von Maven zur Verfügung gestellten Archetype für JavaFX
  • mit einem Archetype eines anderen Anbieters, der in das Maven-Projekt eingebunden wird.

Maven-Archetype

In der Command-Palette „select the project type“ wählen Sie nicht „Maven“, sondern scrollen weiter nach unten zum Eintrag „JavaFX“ und wählen diesen aus.

VSCode: ein Java-Projekt erstellen

Anschließend bestimmen Sie ein Verzeichnis für das Projekt und vergeben Paketnamen und Projektnamen. Dann öffnet sich der Terminal-Bereich von VSCode in dem Informationen zum Projekt angezeigt werden und in dem Sie verschiedene Angaben machen müssen.

  • die Version „1.0 Snapshot“: das können Sie so mit „Enter“ bestätigen
  • javafx version: 13: aktuell ist Version 21.0.1 (Stand April 2024), geben Sie „n“ ein.

Damit startet die Abfrage erneut und javafx version lässt sich anpassen.

VSCode: ein Java-Projekt erstellen

Hinweis: auf einem Mac mit M1-Chip oder höher, muss mindestens JavaFX 19 gewählt werden.

Ein Info-Fenster zeigt die erfolgreiche Fertigstellung des Projekts an.

VSCode: ein Java-Projekt erstellen

Die Programm-Datei „App.java“ befindet sich für unser Beispiel im Verzeichnis src > main > java > info.zoomin . Sie können das Programm direkt starten und erhalten dieses Fenster:

VSCode: ein Java-Projekt erstellen

„Problems“

Im Quelltext von App.java ist der Klassen-Name „Stage“ orange unterstrichen (je nach gewähltem Farbschema), auch die Verzeichnisse und die App erscheinen in dieser Farbe.

VSCode: ein Java-Projekt erstellen

Dies signalisiert einen Warnhinweis. Im Terminal-Bereich unter dem Tab „Problems“ wird die zugehörige Meldung gezeigt:

VSCode: ein Java-Projekt erstellen
The type Stage from module javafx.graphics may not be accessible to clients due to missing 'requires transitive'

Um das Problem zu beheben, ergänzen Sie die Datei module-info.java in Zeile 2:

requires transitive javafx.controls;

Nach dem Speichern der Datei sollte die Meldung verschwunden sein:

VSCode: ein Java-Projekt erstellen

FXML

Der Maven Archetype für JavaFX setzt FXML ein. FXML ist ein Dateiformat, das JavaFX verwendet, um das Layout von Benutzeroberflächen zu erstellen. Wer die GUI lieber direkt mit JavaFX programmiert, kann die entsprechenden Elemente im Programmcode ersetzen.

In der Konfigurationsdatei pom.xml muss dann die Dependency

<!-- https://mvnrepository.com/artifact/org.openjfx/javafx-graphics -->
<dependency>
    <groupId>org.openjfx</groupId>
    <artifactId>javafx-graphics</artifactId>
    <version>22.0.1</version>
</dependency>

eingefügt werden. Die Dependency für fxml kann man dann löschen:

<dependency>
    <groupId>org.openjfx</groupId>
    <artifactId>javafx-fxml</artifactId>
    <version>21.0.1</version>   
</dependency>

Archetype anderer Hersteller

Über die Command-Palette von VSCode finden Sie zahlreiche weitere Archetypen anderer Hersteller. Erstellen Sie dazu ein neues Java Projekt mit der Option „Maven“ und wählen Sie dann „More“. Geben Sie „fx“ in das Suchfeld, um die angebotene Liste zu filtern.

VSCode: ein Java-Projekt erstellen

Für unser Beispiel haben wir „gluonfx“ gewählt, es gibt dabei z.Zt. nur Version 0.0.3. Die weiteren Einrichtungsschritte entsprechen den oben beschriebenen.

Die Programmdatei heißt „HelloFX.java“ und liegt im Verzeichnis src > main > java > info.zoomin .

Allerdings erhält man beim ersten Versuch, „HelloFX.java“ zu starten, eine Fehlermeldung:

VSCode: ein Java-Projekt erstellen
Fehler: Zum Ausführen dieser Anwendung benötigte JavaFX-Runtime-Komponenten fehlen

Der Fehler tritt auf, wenn im Verzeichnis java die Datei module-info.java fehlt.

Erstellen Sie die Datei im Ordner java mit dem folgenden Inhalt:

module info.zoomin {
    requires transitive javafx.controls;
    requires javafx.graphics;
​
    exports info.zoomin;
}
Die Datei "module-info" in einem Editor-Fenster.

Ersetzen Sie „info.zoomin“ durch Ihren eigenen Paketnamen, die Zeile für fxml müssen Sie ggf. löschen..

Nun können Sie das Programm neu starten und erhalten ein Fenster mit einem freundlich grüßenden „Duke“:

VSCode: ein Java-Projekt erstellen

Weiterlesen

Die vollständigen Java-Projekte haben wir auf GitHub bereitgestellt.