Projekt „Java Anwendung markdown2flashcards“ Teil 1 – Grundgerüst für Java Anwendung „markdown2flashcards“ mit VSCode, Maven und GIT einrichten, kompilieren und ausführen
Entwicklungsumgebung und Projekt-Struktur

Was ist überhaupt Maven?
Java Maven ist ein Build-Management-Tool, das vor allem in Java-Projekten verwendet wird. Es hilft bei der Verwaltung von Abhängigkeiten, dem Erstellen, Testen und Verwalten von Projekten und deren Modulen. Es vereinfacht den gesamten Entwicklungsprozess und bietet eine Reihe von nützlichen Funktionen:
- Projektstruktur und -management: Maven hilft, eine standardisierte Projektstruktur zu erstellen. Damit können Entwickler leichter nachvollziehen, wie ein Projekt aufgebaut ist, ohne dass jedes Teammitglied eine eigene Struktur definieren muss.
- Abhängigkeitsmanagement: Maven vereinfacht die Handhabung von externen Bibliotheken (z. B. Frameworks oder Tools), indem es automatisch die richtigen Versionen von Bibliotheken aus einem zentralen Repository (wie dem Maven Central Repository) herunterlädt.
- Automatisiertes Build: Maven übernimmt die Aufgabe, den Code zu kompilieren, Tests durchzuführen, Pakete zu erstellen und den Build zu verwalten. Es stellt sicher, dass der gesamte Build-Prozess wiederholbar und konsistent ist.
- Plugin-System: Maven bietet eine große Anzahl an Plugins, die verschiedene Aufgaben wie Code-Analyse, Dokumentationserstellung und das Deployment von Anwendungen ermöglichen.
- Pom-Datei (Project Object Model): Die zentrale Konfigurationsdatei in Maven ist die pom.xml. Sie beschreibt das Projekt, seine Abhängigkeiten, das Build-Verfahren und andere Projekt-spezifische Informationen.
Insgesamt trägt Maven dazu bei, die Komplexität von Softwareprojekten zu verringern und den Entwicklungsprozess zu optimieren und zu automatisieren.
Konfigurationsdatei pom.xml anlegen
Inhalt der 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>de.linformatik</groupId>
<artifactId>markdown2flashcards</artifactId>
<version>1.0-SNAPSHOT</version>
<name>markdown2flashcards</name>
<url>http://linformatik.de</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>21</maven.compiler.source>
<maven.compiler.target>21</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<!-- Maven Compiler Plugin für Java Version 21 -->
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<source>21</source>
<target>21</target>
</configuration>
</plugin>
<!-- JAR Plugin für Manifest -->
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
<configuration>
<archive>
<manifest>
<!-- Hauptklasse im Manifest definieren -->
<mainClass>de.linformatik.App</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
<!-- Maven Clean Plugin für das Bereinigen des Projekts -->
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<!-- Maven Resources Plugin für das Kopieren von Ressourcen -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<!-- Maven Surefire Plugin für Tests -->
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
</plugin>
<!-- Maven Install Plugin für das Installieren der Artefakte -->
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
</plugin>
<!-- Maven Deploy Plugin für das Bereitstellen der Artefakte -->
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
<!-- Maven Site Plugin für die Erstellung von Sites und Berichten -->
<plugin>
<artifactId>maven-site-plugin</artifactId>
<version>3.7.1</version>
</plugin>
<!-- Maven Project Info Reports Plugin -->
<plugin>
<artifactId>maven-project-info-reports-plugin</artifactId>
<version>3.0.0</version>
</plugin>
</plugins>
</build>
</project>
1. Kopfzeile und Namespaces
<?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">
- XML-Deklaration: Gibt an, dass dies eine XML-Datei ist, die im UTF-8-Zeichensatz kodiert ist.
- Namespace und Schema: Definiert die XML-Namensräume und die Schema-Location für Maven, damit die Datei korrekt interpretiert werden kann.
2. Projektmetadaten
xmlKopierenBearbeiten<modelVersion>4.0.0</modelVersion>
<groupId>de.linformatik</groupId>
<artifactId>markdown2flashcards</artifactId>
<version>1.0-SNAPSHOT</version>
<name>markdown2flashcards</name>
<url>http://linformatik.de</url>
- modelVersion: Version des POM-Modells (hier immer
4.0.0
). - groupId: Eindeutiger Bezeichner für die Gruppe oder das Unternehmen, das das Projekt verwaltet. Hier ist es
de.linformatik
. - artifactId: Der Name des Projekts oder Artefakts, in diesem Fall
markdown2flashcards
. - version: Die Version des Projekts.
1.0-SNAPSHOT
deutet darauf hin, dass dies eine Entwicklungsversion ist. - name: Der Name des Projekts.
- url: Eine URL, die mehr Informationen über das Projekt bereitstellt.
3. Properties
xmlKopierenBearbeiten<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>21</maven.compiler.source>
<maven.compiler.target>21</maven.compiler.target>
</properties>
- project.build.sourceEncoding: Stellt sicher, dass der Quellcode mit der UTF-8-Zeichenkodierung verarbeitet wird.
- maven.compiler.source und maven.compiler.target: Geben an, dass der Code mit Java 21 kompiliert werden soll.
4. Abhängigkeiten
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
</dependencies>
- Hier wird eine Abhängigkeit von JUnit (Version 4.11) für das Testen des Projekts definiert. Das
scope
-Tag gibt an, dass diese Abhängigkeit nur für die Testphase benötigt wird.
5. Build-Abschnitt
Der build
-Abschnitt enthält Plugins, die das Verhalten von Maven beim Erstellen des Projekts steuern. Hier sind einige wichtige Plugins, die in der Konfiguration definiert sind:
a. Maven Compiler Plugin
xmlKopierenBearbeiten<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<source>21</source>
<target>21</target>
</configuration>
</plugin>
- Dieses Plugin stellt sicher, dass der Java-Quellcode mit der Version 21 des JDK kompiliert wird.
b. Maven Jar Plugin
xmlKopierenBearbeiten<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
<configuration>
<archive>
<manifest>
<mainClass>de.linformatik.App</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
- Erzeugt eine JAR-Datei und legt die Hauptklasse (
de.linformatik.App
) fest, die beim Ausführen der JAR-Datei gestartet wird.
c. Maven Clean Plugin
xmlKopierenBearbeiten<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
</plugin>
- Dieses Plugin sorgt dafür, dass das Projekt bei jedem Build-Befehl sauber gemacht wird, also alle vorherigen Artefakte gelöscht werden.
d. Maven Resources Plugin
xmlKopierenBearbeiten<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
- Kopiert Ressourcen (wie Konfigurationsdateien) aus dem Quellverzeichnis in das Zielverzeichnis.
e. Maven Surefire Plugin
xmlKopierenBearbeiten<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
</plugin>
- Dieses Plugin führt die Tests (z. B. JUnit-Tests) während des Build-Prozesses aus.
f. Maven Install Plugin
xmlKopierenBearbeiten<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
</plugin>
- Dieses Plugin installiert die erzeugten Artefakte in das lokale Maven-Repository.
g. Maven Deploy Plugin
xmlKopierenBearbeiten<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
- Hiermit können Artefakte in ein zentrales Repository bereitgestellt werden.
h. Maven Site Plugin
<plugin>
<artifactId>maven-site-plugin</artifactId>
<version>3.7.1</version>
</plugin>
- Erzeugt eine Website für das Projekt, die häufig Projektinformationen, Dokumentationen und Berichte enthält.
i. Maven Project Info Reports Plugin
xmlKopierenBearbeiten<plugin>
<artifactId>maven-project-info-reports-plugin</artifactId>
<version>3.0.0</version>
</plugin>
- Generiert Berichte über das Projekt, wie z. B. Abhängigkeiten, Lizenzinformationen und mehr.
Fazit
Diese pom.xml
-Datei definiert ein Java-Projekt mit den folgenden Kernmerkmalen:
- Das Projekt verwendet Java 21.
- Es enthält eine Test-Abhängigkeit (
JUnit 4.11
). - Mehrere Maven-Plugins sind konfiguriert, um das Projekt zu kompilieren, zu testen, zu bereinigen, zu erstellen und zu veröffentlichen.
- Eine Hauptklasse (
de.linformatik.App
) wird in das JAR-Manifest eingebaut.
Das Ziel dieser Datei ist es, den Build-Prozess zu automatisieren und die Verwaltung des Projekts und seiner Abhängigkeiten zu vereinfachen.
Anwendung kompilieren und ausführbare JAR-Datei erstellen – Build und Tests ausführen
Um das gesamte Projekt zu bauen und alle Tests auszuführen, kannst du den folgenden Befehl verwenden:
mvn clean install

JAR-Datei ausführen
Unter markdown2flashcards\target liegt jetzt die markdown2flashcards-1.0-SNAPSHOT.jar, welche mit dem Befehl
java -jar .\markdown2flashcards-1.0-SNAPSHOT.jar
ausgeführt werden kann.

In der Ausgabe erscheint jetzt der Text „Hallo World!“, d.h. das Grundgerüst der Anwendung wurde erfolgreich ausgeführt,
die Anwendung kann jetzt Stück für Stück erweitert werden.
JAR Datei per Doppelklick ausführen
Mit der start.bat kann die Anwednung per Doppelklick ausgeführt werden:
@echo off
java -jar "J:\Meine Ablage\develop\markdown2flashcards\target\markdown2flashcards-1.0-SNAPSHOT.jar"
pause


Powershell Script für die Einrichtung des GIT-Projekts

# PowerShell-Skript zum Initialisieren eines Git-Repositories und ersten Commit durchführen
# Überprüfen, ob Git installiert ist
$gitInstalled = Get-Command git -ErrorAction SilentlyContinue
if (-not $gitInstalled) {
Write-Host "Git ist nicht installiert. Bitte installiere Git und versuche es erneut."
exit
}
# Benutzer nach dem Verzeichnis fragen
$projectDir = Read-Host "Gib den Pfad zum Projektverzeichnis ein"
# Überprüfen, ob das Verzeichnis existiert
if (-not (Test-Path -Path $projectDir)) {
Write-Host "Das angegebene Verzeichnis existiert nicht. Bitte überprüfe den Pfad."
exit
}
# Git-Nutzername und E-Mail-Adresse setzen
$name = Read-Host "Salvatore Spadaro"
$email = Read-Host "salvatore.spadaro@gmail.com"
# Git-Konfiguration für Benutzername und E-Mail setzen
git config user.name $name
git config user.email $email
# Zum Projektverzeichnis wechseln
Set-Location -Path $projectDir
# Git-Repository initialisieren
Write-Host "Initialisiere Git-Repository..."
git init
# Dateien zum Git-Repository hinzufügen
Write-Host "Füge Dateien zum Repository hinzu..."
git add .
# Ersten Commit durchführen
$commitMessage = "Initial commit"
Write-Host "Führe ersten Commit durch..."
git commit -m $commitMessage
Write-Host "Git-Repository wurde erfolgreich initialisiert und der erste Commit wurde durchgeführt."
Write-Host "Dein Name und deine E-Mail-Adresse wurden für Git konfiguriert."