]> juplo.de Git - demos/kafka/training/commitdiff
Skripte: --help, einheitliche Parameter; build.sh + patch-nexus.sh ergänzt
authorKai Moritz <kai.milan.moritz@googlemail.com>
Sun, 31 May 2026 19:07:52 +0000 (19:07 +0000)
committerKai Moritz <kai.milan.moritz@googlemail.com>
Sun, 31 May 2026 19:07:52 +0000 (19:07 +0000)
Alle vorhandenen Skripte:
- --help mit vollständiger Beschreibung ergänzt
- Fehlerbehandlung für unbekannte Parameter vereinheitlicht
- Argument-Parsing auf while-Schleife mit shift umgestellt

Neue Skripte (aus scripting-Branch verschoben/neu erstellt):
- build.sh: Baut alle Musterlösungen aus spickzettel/; erkennt
  automatisch Maven (pom.xml vorhanden) oder Gradle (build.gradle +
  gradlew, kein pom.xml); läuft bei Fehlern durch und meldet alle
  fehlgeschlagenen Übungen am Ende; optional --publish für Docker-Images
- patch-nexus.sh: Von scripting verschoben (unverändert); patcht
  Gradle-Setups für einen internen Nexus-Mirror

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
README-gradle.sh
README-maven.sh
build.sh [new file with mode: 0755]
init-exercises.sh
patch-nexus.sh [new file with mode: 0755]

index bc64f1d20d7ff6406f58c3935c7533b74d21ce8b..38b992c2c07f63ce25e0a646119334d417903ed3 100755 (executable)
@@ -1,9 +1,4 @@
 #!/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"
@@ -11,9 +6,20 @@ 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 ;;
+while [ $# -gt 0 ]; do
+  case "$1" in
+    --update) UPDATE=true; shift ;;
+    --help)
+      echo "Technik-Check für Gradle."
+      echo "Stellt sicher, dass der Gradle-Wrapper bereit ist, und führt einen vollständigen"
+      echo "Build- und Starttest durch."
+      echo ""
+      echo "Verwendung: ./README-gradle.sh [--update] [--help]"
+      echo ""
+      echo "  --update   Ersetzt veralteten Wrapper durch die benötigte Version"
+      echo "  --help     Diese Hilfe anzeigen"
+      exit 0 ;;
+    *) echo "Unbekannter Parameter: $1" >&2; exit 1 ;;
   esac
 done
 
index 17f615a398cd99e465dffeed35f21e841f7d652d..bd61533d45571da2c25d7069b086cdc9bd12275f 100755 (executable)
@@ -1,5 +1,19 @@
 #!/bin/bash
 
+while [ $# -gt 0 ]; do
+  case "$1" in
+    --help)
+      echo "Technik-Check für Maven."
+      echo "Führt einen vollständigen Build- und Starttest durch."
+      echo ""
+      echo "Verwendung: ./README-maven.sh [--help]"
+      echo ""
+      echo "  --help   Diese Hilfe anzeigen"
+      exit 0 ;;
+    *) echo "Unbekannter Parameter: $1" >&2; exit 1 ;;
+  esac
+done
+
 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
 
diff --git a/build.sh b/build.sh
new file mode 100755 (executable)
index 0000000..f3b8a89
--- /dev/null
+++ b/build.sh
@@ -0,0 +1,72 @@
+#!/bin/bash
+set -e
+
+SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
+TRAINING_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
+SPICKZETTEL="$(cd "$TRAINING_ROOT/.." && pwd)/spickzettel"
+
+PUBLISH=false
+while [ $# -gt 0 ]; do
+  case "$1" in
+    --publish) PUBLISH=true; shift ;;
+    --help)
+      echo "Baut alle Musterlösungen aus dem spickzettel-Verzeichnis."
+      echo "Erkennt automatisch, welches Build-Setup nach der Initialisierung vorhanden ist:"
+      echo "  pom.xml vorhanden              → Maven"
+      echo "  build.gradle + gradlew, kein pom.xml → Gradle"
+      echo "  weder noch                     → kein Build-Setup, wird übersprungen"
+      echo ""
+      echo "Verwendung: ./build.sh [--publish] [--help]"
+      echo ""
+      echo "  --publish   Docker-Images nach dem Bauen veröffentlichen"
+      echo "  --help      Diese Hilfe anzeigen"
+      exit 0 ;;
+    *) echo "Unbekannter Parameter: $1" >&2; exit 1 ;;
+  esac
+done
+
+if [ ! -d "$SPICKZETTEL" ]; then
+  echo "Fehler: spickzettel-Verzeichnis nicht gefunden: $SPICKZETTEL" >&2
+  echo "  Zuerst copy.sh aus dem scripting-Branch ausführen." >&2
+  exit 1
+fi
+
+FAILED=()
+
+while IFS= read -r dir; do
+  rel="${dir#${SPICKZETTEL}/}"
+
+  if [ -f "$dir/pom.xml" ]; then
+    echo -e "\nBaue $rel (Maven)"
+    (cd "$dir" && mvn clean install) || { FAILED+=("$rel (Maven: build)"); continue; }
+    if $PUBLISH; then
+      echo "Veröffentliche Docker-Image für $rel"
+      if [[ "$dir" == */grundlagen/* ]]; then
+        (cd "$dir" && mvn jib:build) || FAILED+=("$rel (Maven: jib:build)")
+      else
+        (cd "$dir" && mvn spring-boot:build-image -Dspring-boot.build-image.publish=true) \
+          || FAILED+=("$rel (Maven: build-image)")
+      fi
+    fi
+  elif [ -f "$dir/build.gradle" ] && [ -f "$dir/gradlew" ]; then
+    echo -e "\nBaue $rel (Gradle)"
+    (cd "$dir" && ./gradlew build) || { FAILED+=("$rel (Gradle: build)"); continue; }
+    if $PUBLISH; then
+      echo "Veröffentliche Docker-Image für $rel"
+      (cd "$dir" && ./gradlew bootBuildImage --publishImage) \
+        || FAILED+=("$rel (Gradle: bootBuildImage)")
+    fi
+  else
+    echo "Überspringe $rel: kein Build-Setup"
+  fi
+done < <(find "$SPICKZETTEL" -mindepth 2 -maxdepth 2 -type d | sort)
+
+if [ ${#FAILED[@]} -gt 0 ]; then
+  echo -e "\nFehler beim Bauen:"
+  for f in "${FAILED[@]}"; do
+    echo "  $f"
+  done
+  exit 1
+fi
+
+echo -e "\nAlle Musterlösungen erfolgreich gebaut."
index 2c1cdde75b72a7eeaf3e45ca33e5ad2010326b32..52c6ffb90a8dfe1aa4c0385bb4e3f034120bdc71 100755 (executable)
@@ -1,11 +1,4 @@
 #!/bin/bash
-# Initialisiert die mit copy.sh kopierten Übungsverzeichnisse für die Schulung.
-# --maven (Standard): Entfernt Gradle-Artefakte aus den Ü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.
-# Das eigene Verzeichnis (technik-check) wird in beiden Modi nicht verändert.
-# In beiden Modi werden Build-Ausgaben (target/, build/) und Caches (.gradle/) bereinigt.
-
 set -e
 
 SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
@@ -15,11 +8,24 @@ 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 ;;
+while [ $# -gt 0 ]; do
+  case "$1" in
+    --gradle) MODE="gradle"; shift ;;
+    --maven)  MODE="maven"; shift ;;
+    --help)
+      echo "Initialisiert alle kopierten Übungsverzeichnisse für die Schulung."
+      echo "Muss aus dem technik-check-Verzeichnis aufgerufen werden."
+      echo "Das eigene Verzeichnis (technik-check) wird nicht verändert."
+      echo "In beiden Modi werden Build-Ausgaben (target/, build/) und Caches (.gradle/) bereinigt."
+      echo ""
+      echo "Verwendung: ./init-exercises.sh [--maven|--gradle] [--help]"
+      echo ""
+      echo "  --maven   (Standard) Entfernt Gradle-Artefakte; nur Maven bleibt"
+      echo "  --gradle  Verteilt Gradle-Wrapper und entfernt Maven-Artefakte."
+      echo "            Erfordert vorherigen Aufruf von ./README-gradle.sh"
+      echo "  --help    Diese Hilfe anzeigen"
+      exit 0 ;;
+    *) echo "Unbekannter Parameter: $1" >&2; exit 1 ;;
   esac
 done
 
diff --git a/patch-nexus.sh b/patch-nexus.sh
new file mode 100755 (executable)
index 0000000..4a1a41b
--- /dev/null
@@ -0,0 +1,103 @@
+#!/bin/bash
+set -e
+
+# Passt Gradle-Setups an einen internen Nexus-Mirror an.
+# Aufruf (aus dem Zielverzeichnis, z.B. ../vorlagen/):
+#
+#   patch-nexus.sh <nexus-maven-url> [--gradle-dist-url=<url>]
+#
+# Ohne --gradle-dist-url bleibt gradle-wrapper.properties unverändert.
+# Falls Gradle-Distributionen ebenfalls über Nexus bereitgestellt werden,
+# muss dort ein "raw proxy"-Repository auf services.gradle.org/distributions/
+# eingerichtet sein.
+
+if [ "$1" = "" ]; then
+  echo "Aufruf: $(basename "$0") <nexus-maven-url> [--gradle-dist-url=<url>]"
+  echo ""
+  echo "Beispiel:"
+  echo "  $(basename "$0") https://nexus.example.com/repository/maven-public/"
+  echo "  $(basename "$0") https://nexus.example.com/repository/maven-public/ \\"
+  echo "    --gradle-dist-url=https://nexus.example.com/repository/gradle-distributions/"
+  exit 1
+fi
+
+NEXUS_URL="$1"
+GRADLE_DIST_URL=""
+for arg in "${@:2}"; do
+  case "$arg" in
+    --gradle-dist-url=*) GRADLE_DIST_URL="${arg#--gradle-dist-url=}" ;;
+    *) echo "Unbekannter Parameter: $arg"; exit 1 ;;
+  esac
+done
+
+TMP_REPO_BLOCK=$(mktemp)
+TMP_PLUGIN_BLOCK=$(mktemp)
+
+cat > "$TMP_REPO_BLOCK" <<EOF
+  maven {
+      url '$NEXUS_URL'
+  }
+  maven {
+      name 'gradle plugins'
+      url 'https://plugins.gradle.org/m2/'
+  }
+EOF
+
+cat > "$TMP_PLUGIN_BLOCK" <<EOF
+pluginManagement {
+  repositories {
+    maven {
+      name 'Nexus-Internal Access'
+      url '$NEXUS_URL'
+    }
+  }
+}
+
+EOF
+
+echo "Bearbeite build.gradle-Dateien..."
+for file in */*/build.gradle; do
+  [ -f "$file" ] || continue
+  echo "  $file"
+  sed -i '/mavenCentral()/d' "$file"
+  if grep -q 'repositories *{' "$file"; then
+    awk -v insert="$(cat "$TMP_REPO_BLOCK")" '
+      BEGIN { added=0 }
+      /repositories[[:space:]]*{/ {
+        print
+        if (!added) { print insert; added=1; next }
+      }
+      { print }
+    ' "$file" > "$file.tmp" && mv "$file.tmp" "$file"
+  else
+    cat "$TMP_REPO_BLOCK" "$file" > "$file.tmp" && mv "$file.tmp" "$file"
+  fi
+done
+
+echo "Bearbeite settings.gradle-Dateien..."
+for file in */*/settings.gradle; do
+  [ -f "$file" ] || continue
+  echo "  $file"
+  if ! grep -q 'pluginManagement' "$file"; then
+    cat "$TMP_PLUGIN_BLOCK" "$file" > "$file.tmp" && mv "$file.tmp" "$file"
+  else
+    echo "    (pluginManagement bereits vorhanden -- uebersprungen)"
+  fi
+done
+
+if [ "$GRADLE_DIST_URL" != "" ]; then
+  echo "Bearbeite gradle-wrapper.properties-Dateien..."
+  for file in */*/gradle/wrapper/gradle-wrapper.properties; do
+    [ -f "$file" ] || continue
+    echo "  $file"
+    # In .properties-Dateien muss ':' als '\:' escaped werden; awk erledigt das sauber
+    awk -v url="$GRADLE_DIST_URL" '
+      BEGIN { gsub(/:/, "\\:", url) }
+      /^distributionUrl=/ { print "distributionUrl=" url; next }
+      { print }
+    ' "$file" > "$file.tmp" && mv "$file.tmp" "$file"
+  done
+fi
+
+rm -f "$TMP_REPO_BLOCK" "$TMP_PLUGIN_BLOCK"
+echo "Fertig."