5 Das Übungsprojekt starten

Theorie ist wichtig. Aber Programmieren lernt man nur durch Programmieren. Ab jetzt arbeiten wir mit einem konkreten Projekt: der Arcade Highscore API.

5.1 Die Idee

Retro-Arcade-Spiele wie Pac-Man, Tetris oder Space Invaders kennt jeder. Was diese Spiele gemeinsam haben: Highscores. Der Ehrgeiz, den eigenen Namen ganz oben auf der Bestenliste zu sehen, hat Generationen von Spielern motiviert.

Unsere API verwaltet genau das: Spieler, Spiele und Punktestände. Ein einfaches Domänenmodell, das trotzdem genug Komplexität bietet, um alle Spring-Konzepte zu demonstrieren.

Ein Player hat einen Nickname und ein Registrierungsdatum. Ein Game hat einen Namen, eine Beschreibung und optional einen theoretischen Maximalscore. Ein Score verbindet beides – welcher Spieler hat in welchem Spiel wie viele Punkte erreicht.

5.2 Die Entwicklungsumgebung

Die Schulungsumgebung läuft in der Cloud. Du brauchst nichts zu installieren – ein Browser reicht.

Teilnehmer 1 Teilnehmer 2 Teilnehmer 3 Teilnehmer 4 Teilnehmer 5 Teilnehmer 6 Teilnehmer 7 Teilnehmer 8 Teilnehmer 9 Teilnehmer 10 Teilnehmer 11 Teilnehmer 12

Nach dem Login siehst du VS Code im Browser. Die Entwicklungsumgebung ist vollständig vorkonfiguriert:

Komponente Version Zweck
Java 21 (LTS) Laufzeitumgebung
Gradle 8.10 Build-Tool
Spring Boot 3.3 Framework

Das Projekt ist bereits geklont und bereit. Die Verzeichnisstruktur folgt den Spring-Boot-Konventionen:

arcade-highscore-api/
├── src/
│   ├── main/
│   │   ├── java/de/digitalfrontiers/arcade/
│   │   │   ├── ArcadeHighscoreApplication.java
│   │   │   ├── domain/
│   │   │   │   ├── Player.java
│   │   │   │   ├── Game.java
│   │   │   │   └── Score.java
│   │   │   └── web/
│   │   │       └── HomeController.java
│   │   └── resources/
│   │       ├── application.yaml
│   │       ├── templates/
│   │       └── static/css/
│   └── test/
├── build.gradle.kts
└── gradlew

5.3 Die Anwendung starten

Öffne ein Terminal in VS Code (Strg+Ö oder über das Menü) und navigiere ins Projektverzeichnis:

cd arcade-highscore-api

Der Start erfolgt über den Gradle Wrapper. Dieser lädt beim ersten Aufruf automatisch die richtige Gradle-Version herunter:

./gradlew bootRun

Die Konsole zeigt den Startvorgang. Spring Boot ist gesprächig – es protokolliert jeden Schritt:

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::                (v3.3.x)

2024-01-15 10:00:00 INFO  Starting ArcadeHighscoreApplication...
2024-01-15 10:00:01 INFO  Tomcat started on port 8080 (http)
2024-01-15 10:00:01 INFO  Started ArcadeHighscoreApplication in 2.3 seconds

Das ASCII-Art-Banner ist ein Spring-Boot-Markenzeichen. Die wichtige Information steht am Ende: Tomcat läuft auf Port 8080.

5.4 Die Landingpage

Öffne einen Browser und navigiere zur Anwendung. Die URL hängt von deiner Lab-Umgebung ab – sie wird vom Dozenten genannt.

Du siehst eine Retro-Arcade-Landingpage mit Neon-Styling. Vier Arcade-Cabinets zeigen die Spiele, die wir später per API verwalten werden. Unten blinkt “INSERT COIN TO PLAY” – ein Gruß an die 80er.

Diese Seite beweist: Die Anwendung läuft. Spring Boot, Tomcat, Thymeleaf – alles funktioniert. Du hast gerade deine erste Spring-Boot-Anwendung gestartet.

5.5 Was da gerade passiert ist

Hinter diesem einfachen Start steckt eine Menge Magie. Spring Boot hat:

  1. Alle Klassen im Package de.digitalfrontiers.arcade gescannt
  2. Den HomeController als Web-Controller erkannt
  3. Thymeleaf als Template-Engine konfiguriert
  4. Einen eingebetteten Tomcat-Server gestartet
  5. Die statischen Ressourcen (CSS) verfügbar gemacht

Du hast nichts davon manuell konfiguriert. Das ist Convention over Configuration in Aktion – das Thema des nächsten Kapitels.

5.6 Bei Problemen

Falls der Start fehlschlägt, prüfe diese typischen Ursachen:

Port bereits belegt: Eine andere Anwendung nutzt Port 8080. Beende sie oder ändere den Port in application.yaml:

server:
  port: 8081

Java nicht gefunden: Der Gradle Wrapper braucht eine Java-Installation. In der Lab-Umgebung ist das vorkonfiguriert – bei lokaler Entwicklung muss JAVA_HOME gesetzt sein.

Gradle-Download hängt: Bei langsamer Internetverbindung kann der erste Download dauern. Geduld – der Wrapper cached alles für spätere Aufrufe.

Wenn alles funktioniert: Herzlichen Glückwunsch. Die Grundlage steht. Ab jetzt geht es ans Eingemachte.