- bootstrap-gradle.sh ersetzt durch init-exercises.sh mit --maven (Standard) und --gradle
- --gradle: verteilt Wrapper (JAR + properties + gradlew) in alle Übungsverzeichnisse
(vorlagen/, livecoding/, spickzettel/), entfernt Maven-Artefakte (pom.xml,
.maven-dockerexclude); scheitert mit Fehler wenn Wrapper noch nicht bereit
- --maven: entfernt verteilte Gradle-Artefakte aus allen Übungsverzeichnissen
- Beide Modi: löschen Build-Ausgaben (target/, build/) und Caches (.gradle/)
- README-gradle.sh: enthält jetzt die Wrapper-Download-Logik mit --update-Schalter;
ohne --update scheitert es laut, wenn installierte Version nicht zur benötigten passt
- .gitignore: gradle/wrapper/.gradle-version (Versions-Marker) ergänzt
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
.gradle
build/
gradle/wrapper/gradle-wrapper.jar
+gradle/wrapper/.gradle-version
!**/src/main/**/build/
!**/src/test/**/build/
#!/bin/bash
+# Technik-Check für Gradle.
+# Stellt sicher, dass der Gradle-Wrapper bereit ist, und führt den Build-Test durch.
+#
+# Ohne Schalter: scheitert mit Fehler, wenn der Wrapper veraltet ist.
+# --update: ersetzt einen veralteten Wrapper durch die benötigte Version.
+
+SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
+WRAPPER_JAR="$SCRIPT_DIR/gradle/wrapper/gradle-wrapper.jar"
+WRAPPER_PROPS="$SCRIPT_DIR/gradle/wrapper/gradle-wrapper.properties"
+SELF_MARKER="$SCRIPT_DIR/gradle/wrapper/.gradle-version"
+
+UPDATE=false
+for arg in "$@"; do
+ case "$arg" in
+ --update) UPDATE=true ;;
+ esac
+done
+
+gradle_version() {
+ grep distributionUrl "$1" | grep -oE '[0-9]+\.[0-9]+(\.[0-9]+)?'
+}
+
+download_wrapper() {
+ local version="$1"
+ if command -v gradle >/dev/null 2>&1; then
+ echo "Verwende lokale Gradle-Installation..."
+ (cd "$SCRIPT_DIR" && gradle wrapper --gradle-version="$version")
+ else
+ echo "Kein lokales Gradle -- lade von GitHub (v${version})..."
+ BASE="https://raw.githubusercontent.com/gradle/gradle/v${version}"
+ mkdir -p "$SCRIPT_DIR/gradle/wrapper"
+ curl -fL "${BASE}/gradle/wrapper/gradle-wrapper.jar" -o "$WRAPPER_JAR"
+ curl -fL "${BASE}/gradlew" -o "$SCRIPT_DIR/gradlew"
+ chmod +x "$SCRIPT_DIR/gradlew"
+ fi
+ echo "$version" > "$SELF_MARKER"
+ echo "Gradle-Wrapper bereit (v${version})."
+}
+
+REQUIRED=$(gradle_version "$WRAPPER_PROPS")
+
+if [ ! -f "$WRAPPER_JAR" ]; then
+ echo "Gradle-Wrapper-JAR fehlt -- lade herunter..."
+ download_wrapper "$REQUIRED"
+elif [ ! -f "$SELF_MARKER" ] || [ "$(cat "$SELF_MARKER")" != "$REQUIRED" ]; then
+ INSTALLED=$(cat "$SELF_MARKER" 2>/dev/null || echo "unbekannt")
+ if $UPDATE; then
+ echo "Aktualisiere Gradle-Wrapper: v${INSTALLED} → v${REQUIRED}..."
+ download_wrapper "$REQUIRED"
+ else
+ echo "FEHLER: Gradle-Version stimmt nicht überein." >&2
+ echo " Installiert: ${INSTALLED}" >&2
+ echo " Benötigt: ${REQUIRED}" >&2
+ echo " Zum Aktualisieren: ./README-gradle.sh --update" >&2
+ exit 1
+ fi
+else
+ echo "Gradle-Wrapper bereits aktuell (v${REQUIRED})."
+fi
docker compose -f docker/docker-compose.yml up -d --remove-orphans kafka-1 kafka-2 kafka-3
docker compose -f docker/docker-compose.yml rm -svf technik-check
-# Gradle-Wrapper erzeugen (nur beim ersten Mal nötig)
-./bootstrap-gradle.sh
-
# Build mit Gradle testen
./gradlew bootBuildImage || exit
+++ /dev/null
-#!/bin/bash
-# Erzeugt den Gradle-Wrapper-JAR, der wegen Mail-Sicherheitsfiltern nicht im
-# Repository enthalten ist. Einmalig ausführen, bevor ./gradlew verwendet wird.
-#
-# Variante 1: Verwendet eine lokale Gradle-Installation, falls vorhanden.
-# Variante 2: Lädt den JAR direkt von GitHub herunter.
-#
-# Mit --distribute werden Gradle-Wrapper-JAR und gradlew zusätzlich in alle
-# Geschwister-Übungsverzeichnisse kopiert (setzt TGZ-Verzeichnisstruktur voraus).
-
-set -e
-
-WRAPPER_JAR="gradle/wrapper/gradle-wrapper.jar"
-PROPERTIES="gradle/wrapper/gradle-wrapper.properties"
-
-DISTRIBUTE=false
-[ "$1" = "--distribute" ] && DISTRIBUTE=true
-
-if [ ! -f "$WRAPPER_JAR" ] || [ ! -f "gradlew" ]; then
- VERSION=$(grep distributionUrl "$PROPERTIES" | grep -oE '[0-9]+\.[0-9]+(\.[0-9]+)?')
- echo "Benötigte Gradle-Version: $VERSION"
-
- if command -v gradle >/dev/null 2>&1; then
- echo "Verwende lokale Gradle-Installation..."
- gradle wrapper --gradle-version="$VERSION"
- echo "Gradle-Wrapper erfolgreich erzeugt."
- else
- echo "Kein lokales Gradle gefunden -- lade von GitHub (v${VERSION})..."
- BASE="https://raw.githubusercontent.com/gradle/gradle/v${VERSION}"
- mkdir -p gradle/wrapper
- curl -fL "${BASE}/gradle/wrapper/gradle-wrapper.jar" -o "$WRAPPER_JAR"
- curl -fL "${BASE}/gradlew" -o gradlew
- chmod +x gradlew
- echo "Gradle-Wrapper erfolgreich heruntergeladen."
- fi
-else
- echo "Gradle-Wrapper bereits vorhanden."
-fi
-
-if $DISTRIBUTE; then
- TRAINING_ROOT="$(cd ../.. && pwd)"
- echo "Verteile Gradle-Wrapper in: $TRAINING_ROOT"
- find "$TRAINING_ROOT" -name "build.gradle" ! -path "$(pwd)/*" | while read -r build_file; do
- exercise_dir="$(dirname "$build_file")"
- target_jar="$exercise_dir/gradle/wrapper/gradle-wrapper.jar"
- target_gradlew="$exercise_dir/gradlew"
- if [ ! -f "$target_jar" ]; then
- mkdir -p "$exercise_dir/gradle/wrapper"
- cp "$WRAPPER_JAR" "$target_jar"
- echo " JAR → $target_jar"
- fi
- if [ ! -f "$target_gradlew" ]; then
- cp gradlew "$target_gradlew"
- echo " gradlew → $target_gradlew"
- fi
- done
-fi
--- /dev/null
+#!/bin/bash
+# Initialisiert die mit copy.sh kopierten Übungsverzeichnisse für die Schulung.
+# --maven (Standard): Entfernt Gradle-Artefakte aus allen Übungsverzeichnissen.
+# --gradle: Gradle-Wrapper verteilen und Maven-Artefakte entfernen.
+# Scheitert mit Fehler, wenn der Wrapper noch nicht bereit ist -- erst README-gradle.sh ausführen.
+# In beiden Modi werden Build-Ausgaben (target/, build/) und Caches (.gradle/) bereinigt.
+
+set -e
+
+SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
+TRAINING_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
+WRAPPER_JAR="$SCRIPT_DIR/gradle/wrapper/gradle-wrapper.jar"
+WRAPPER_PROPS="$SCRIPT_DIR/gradle/wrapper/gradle-wrapper.properties"
+SELF_MARKER="$SCRIPT_DIR/gradle/wrapper/.gradle-version"
+
+MODE="maven"
+for arg in "$@"; do
+ case "$arg" in
+ --gradle) MODE="gradle" ;;
+ --maven) MODE="maven" ;;
+ *) echo "Unbekannter Schalter: $arg" >&2; exit 1 ;;
+ esac
+done
+
+gradle_version() {
+ grep distributionUrl "$1" | grep -oE '[0-9]+\.[0-9]+(\.[0-9]+)?'
+}
+
+exercise_dirs() {
+ local roots=("$TRAINING_ROOT")
+ for sibling in livecoding spickzettel; do
+ local candidate
+ candidate="$(cd "$TRAINING_ROOT/.." && pwd)/$sibling"
+ [ -d "$candidate" ] && roots+=("$candidate")
+ done
+ {
+ printf '%s\n' "$SCRIPT_DIR"
+ for root in "${roots[@]}"; do
+ find "$root" -maxdepth 2 -name "build.gradle" -exec dirname {} \;
+ done
+ } | sort -u
+}
+
+if [ "$MODE" = "gradle" ]; then
+ REQUIRED=$(gradle_version "$WRAPPER_PROPS")
+
+ if [ ! -f "$WRAPPER_JAR" ] || \
+ [ ! -f "$SELF_MARKER" ] || \
+ [ "$(cat "$SELF_MARKER")" != "$REQUIRED" ]; then
+ echo "FEHLER: Gradle-Wrapper nicht bereit (v${REQUIRED})." >&2
+ echo " Bitte zuerst ./README-gradle.sh ausführen." >&2
+ echo " Bei Versions-Abweichung: ./README-gradle.sh --update" >&2
+ exit 1
+ fi
+
+ echo "Gradle-Version: $REQUIRED"
+
+ while IFS= read -r dir; do
+ if [ "$dir" != "$SCRIPT_DIR" ]; then
+ marker="$dir/gradle/wrapper/.gradle-version"
+ if [ ! -f "$dir/gradle/wrapper/gradle-wrapper.jar" ] || \
+ [ ! -f "$dir/gradle/wrapper/gradle-wrapper.properties" ] || \
+ [ ! -f "$dir/gradlew" ] || \
+ [ ! -f "$marker" ] || \
+ [ "$(cat "$marker")" != "$REQUIRED" ]; then
+ mkdir -p "$dir/gradle/wrapper"
+ cp "$WRAPPER_JAR" "$dir/gradle/wrapper/gradle-wrapper.jar"
+ cp "$WRAPPER_PROPS" "$dir/gradle/wrapper/gradle-wrapper.properties"
+ cp "$SCRIPT_DIR/gradlew" "$dir/gradlew"
+ chmod +x "$dir/gradlew"
+ echo "$REQUIRED" > "$marker"
+ echo " Wrapper → $(basename "$(dirname "$dir")")/$(basename "$dir")"
+ fi
+ fi
+
+ for f in pom.xml .maven-dockerexclude; do
+ [ -f "$dir/$f" ] && rm "$dir/$f" && echo " $f ← $(basename "$(dirname "$dir")")/$(basename "$dir")"
+ done
+ rm -rf "$dir/target" "$dir/build"
+ done < <(exercise_dirs)
+
+elif [ "$MODE" = "maven" ]; then
+ while IFS= read -r dir; do
+ if [ "$dir" = "$SCRIPT_DIR" ]; then
+ # Nur heruntergeladene Artefakte entfernen; gradlew und properties bleiben (Quelldateien)
+ rm -f "$dir/gradle/wrapper/gradle-wrapper.jar" \
+ "$dir/gradle/wrapper/.gradle-version"
+ else
+ rm -f "$dir/gradle/wrapper/gradle-wrapper.jar" \
+ "$dir/gradle/wrapper/gradle-wrapper.properties" \
+ "$dir/gradle/wrapper/.gradle-version" \
+ "$dir/gradlew"
+ rmdir "$dir/gradle/wrapper" 2>/dev/null || true
+ rmdir "$dir/gradle" 2>/dev/null || true
+ fi
+ rm -rf "$dir/.gradle" "$dir/target" "$dir/build"
+ done < <(exercise_dirs)
+fi