| Suffix | Bedeutung | Zielverzeichnis (`copy.sh`) |
|--------|-----------|----------------------------|
-| *(keiner)* | Lösung / Musterlösung | `../spickzettel/<branch>` |
-| `--vorlage` | Übungsvorlage für Teilnehmer | `../vorlagen/<branch-ohne-suffix>` |
-| `--livecoding` | Startpunkt für Live-Coding-Demo (Schritt 0) | `../livecoding/<branch-ohne-suffix>` |
+| *(keiner)* | Lösung / Musterlösung | `../training-exercises/spickzettel/<branch>` |
+| `--vorlage` | Übungsvorlage für Teilnehmer | `../training-exercises/vorlagen/<branch-ohne-suffix>` |
+| `--livecoding` | Startpunkt für Live-Coding-Demo (Schritt 0) | `../training-exercises/livecoding/<branch-ohne-suffix>` |
| `--livecoding--schritte` | Schrittweise Entwicklung einer Live-Coding-Session | *(wird nicht kopiert)* |
Branch-Name-Präfixe gruppieren Übungen nach Thema:
| `reset.sh` | Ohne Argument: setzt alle Branches auf `origin/<branch>` zurück. Mit Argument: auf Tag `<branch>--<prefix>` |
| `diff.sh` | Ohne Arg: lokaler Branch gegen `origin/<branch>`. Ein Arg: gegen `<branch>--<suffix>`. Zwei Args: `<branch>--<suffix1>` gegen `<branch>--<suffix2>` |
| `build.sh` | Baut alle Branches (erkennt Maven/Gradle automatisch); `--vorlage`-Branches werden übersprungen. Mit `--publish`: Docker-Images veröffentlichen |
-| `copy.sh` | Kopiert Branches anhand ihres Suffix in `../vorlagen/`, `../livecoding/` oder `../spickzettel/` (siehe Suffix-Tabelle oben); `--livecoding--schritte`-Branches werden übersprungen. `rsync --delete` ist immer aktiv. Verzeichnisse zu nicht mehr gelisteten Branches werden automatisch bereinigt. Optionaler Tag-Suffix als erstes Argument kopiert den jeweiligen Tag-Stand. Mit `--nexus-url=<url>` werden Gradle-Setups anschließend für einen internen Nexus gepatcht |
+| `copy.sh` | Kopiert Branches anhand ihres Suffix in `../training-exercises/vorlagen/`, `../training-exercises/livecoding/` oder `../training-exercises/spickzettel/` (siehe Suffix-Tabelle oben); `--livecoding--schritte`-Branches werden übersprungen. `rsync --delete` ist immer aktiv. Verzeichnisse zu nicht mehr gelisteten Branches werden automatisch bereinigt. Optionaler Tag-Suffix als erstes Argument kopiert den jeweiligen Tag-Stand. Mit `--nexus-url=<url>` werden Gradle-Setups anschließend für einen internen Nexus gepatcht |
| `patch-nexus.sh` | Patcht `build.gradle` (Nexus als Repository), `settings.gradle` (pluginManagement) und optional mit `--gradle-dist-url=<url>` auch `gradle-wrapper.properties`. Wird aus dem Zielverzeichnis (`../vorlagen/`) aufgerufen |
Nach Massenoperationen immer zu `scripting` zurückkehren — Skripte führen am Ende `git checkout scripting` aus.
| Skript | Zweck |
|--------|-------|
-| `init-exercises.sh` | Initialisiert die mit `copy.sh` kopierten Übungsverzeichnisse (`vorlagen/`, `livecoding/`, `spickzettel/`). Standard: `--maven` (entfernt Gradle-Artefakte). Mit `--gradle`: verteilt Gradle-Wrapper (JAR, properties, gradlew) und entfernt Maven-Artefakte. Beide Modi löschen Build-Ausgaben und Caches. Scheitert mit Fehler, wenn `--gradle` verwendet wird, aber der Wrapper noch nicht bereit ist — dann zuerst `README-gradle.sh` ausführen. |
+| `init-exercises.sh` | Initialisiert die mit `copy.sh` kopierten Übungsverzeichnisse (`training-exercises/vorlagen/`, `training-exercises/livecoding/`, `training-exercises/spickzettel/`). Standard: `--maven` (entfernt Gradle-Artefakte). Mit `--gradle`: verteilt Gradle-Wrapper (JAR, properties, gradlew) und entfernt Maven-Artefakte. Beide Modi löschen Build-Ausgaben und Caches. Scheitert mit Fehler, wenn `--gradle` verwendet wird, aber der Wrapper noch nicht bereit ist — dann zuerst `README-gradle.sh` ausführen. |
| `README-gradle.sh` | Technik-Check für Gradle: stellt Gradle-Wrapper bereit (lädt ihn herunter, falls fehlend) und führt Build-Test durch. Ohne Schalter: scheitert laut, wenn installierte Version nicht zur benötigten passt. Mit `--update`: ersetzt veralteten Wrapper durch die benötigte Version. |
`gradle-wrapper.jar` ist absichtlich nicht im Repository (wird von Unternehmens-Mail-Filtern blockiert). `gradlew` und `gradle/wrapper/gradle-wrapper.properties` sind versioniert und definieren die maßgebliche Gradle-Version für alle Übungen der Schulung. Der Versions-Marker `gradle/wrapper/.gradle-version` ist gitignoriert.
### TGZ-Verzeichnisstruktur
-Branch-Namen bilden auch die Verzeichnisstruktur im verteilten TGZ ab: Der Branch `springkafka/technik-check--vorlage` wird als `springkafka/technik-check/` extrahiert. Von dort ist `../..` das Trainings-Wurzelverzeichnis — so findet `init-exercises.sh` alle Übungsverzeichnisse korrekt.
+Branch-Namen bilden auch die Verzeichnisstruktur im verteilten TGZ ab: Der Branch `springkafka/technik-check--vorlage` wird als `springkafka/technik-check/` extrahiert. Von dort ist `../..` das Vorlagen-Wurzelverzeichnis (`training-exercises/vorlagen/`) — `init-exercises.sh` berechnet `livecoding` und `spickzettel` als Geschwisterordner davon und findet so alle Übungsverzeichnisse korrekt.
## Einen neuen Übungs-Branch hinzufügen