]> juplo.de Git - demos/kafka/training/commitdiff
refactor: Docker-Build von fabric8/bmuschko auf Jib umstellen
authorKai Moritz <kai.milan.moritz@googlemail.com>
Fri, 22 May 2026 12:39:00 +0000 (12:39 +0000)
committerKai Moritz <kai.milan.moritz@googlemail.com>
Fri, 29 May 2026 19:26:16 +0000 (19:26 +0000)
Maven nutzte das io.fabric8:docker-maven-plugin mit einem handgepflegten
Dockerfile. Gradle kopierte das JAR umständlich in ein target/-Verzeichnis,
damit dasselbe Dockerfile funktioniert (COPY target/*.jar).

Beide Build-Systeme nutzen jetzt Jib (com.google.cloud.tools:jib-maven-plugin
bzw. com.google.cloud.tools.jib), das direkt aus den compilierten Klassen
und Abhängigkeiten ein OCI-Image erzeugt:

  Maven:  mvn package  (jib:dockerBuild ist an package-Phase gebunden)
  Gradle: ./gradlew jibDockerBuild

Für den Registry-Push:
  Maven:  mvn jib:build
  Gradle: ./gradlew jib

Vorteile:
- Kein Dockerfile mehr nötig (kein Kopier-Hack in Gradle)
- Beide Build-Systeme verwenden dieselbe Methode
- Optimiertes Layering (Abhängigkeiten in separaten Layern)
- Kein laufender Docker-Daemon für den Build nötig

Außerdem: gradle-git-properties Plugin hinzugefügt, analog zum
git-commit-id-plugin in Maven.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
build.gradle
pom.xml

index 0119074d23651b0cb94964e025cb98abcb8410f2..925d6c5be2ad42b589161ba41eec6e0e350f5aa9 100644 (file)
@@ -1,10 +1,9 @@
-import com.bmuschko.gradle.docker.tasks.image.DockerBuildImage
-
 plugins {
        id 'java'
        id 'org.springframework.boot' version '4.0.2'
        id 'io.spring.dependency-management' version '1.1.7'
-       id 'com.bmuschko.docker-remote-api' version '9.3.3'
+       id 'com.gorylenko.gradle-git-properties' version '2.4.2'
+       id 'com.google.cloud.tools.jib' version '3.4.5'
 }
 
 group = 'de.juplo.kafka'
@@ -33,35 +32,11 @@ dependencies {
        annotationProcessor 'org.projectlombok:lombok'
 }
 
-docker {
-       // Optional: Konfiguriere den Docker-Host, falls nötig
-       // url = 'unix:///var/run/docker.sock' (Standard)
-}
-
-
-def targetDir = file("${projectDir}/target")
-def appJarName = "${project.name}-${project.version}.jar"
-
-// Task zum Bereinigen des `target`-Verzeichnisses bei `clean`
-clean {
-       delete targetDir
-}
-
-// Task zum Kopieren des Haupt-JARs
-task copyJar(type: Copy) {
-       from "$buildDir/libs/${appJarName}"
-       into targetDir
-       dependsOn build
-
-       doFirst {
-               def libs = file("${targetDir}/libs")
-               mkdir(libs)
-       }
+tasks.named('test') {
+       useJUnitPlatform()
 }
 
-// Docker-Task
-task buildDockerImage(type: DockerBuildImage) {
-       inputDir = file('.')
-       images = ["juplo/${project.name}:${project.version}"]
-       dependsOn copyJar
+jib {
+       from { image = 'eclipse-temurin:21-jre' }
+       to { image = "juplo/${project.name}:${project.version}" }
 }
diff --git a/pom.xml b/pom.xml
index a28a39f7c6f394f767b8d8b8ea01329cc2d3a528..bfb9b6f509993c833a4877d9dc88c022a8b19750 100644 (file)
--- a/pom.xml
+++ b/pom.xml
         <artifactId>git-commit-id-plugin</artifactId>
       </plugin>
       <plugin>
-        <groupId>io.fabric8</groupId>
-        <artifactId>docker-maven-plugin</artifactId>
-        <version>0.45.0</version>
+        <groupId>com.google.cloud.tools</groupId>
+        <artifactId>jib-maven-plugin</artifactId>
+        <version>3.4.5</version>
         <configuration>
-          <images>
-            <image>
-              <name>juplo/%a:%v</name>
-            </image>
-          </images>
+          <from>
+            <image>eclipse-temurin:21-jre</image>
+          </from>
+          <to>
+            <image>juplo/${project.artifactId}:${project.version}</image>
+          </to>
         </configuration>
         <executions>
           <execution>
-             <id>build</id>
-             <phase>package</phase>
-             <goals>
-               <goal>build</goal>
-             </goals>
+            <phase>package</phase>
+            <goals>
+              <goal>dockerBuild</goal>
+            </goals>
           </execution>
         </executions>
       </plugin>