This is an automated email from the ASF dual-hosted git repository.

chia7712 pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/kafka.git


The following commit(s) were added to refs/heads/trunk by this push:
     new c6bbbbe24d9 KAFKA-19174 Gradle version upgrade 8 -->> 9 (#19513)
c6bbbbe24d9 is described below

commit c6bbbbe24d96e81ad0856ccb81d1b4bc1269b68b
Author: Dejan Stojadinović <[email protected]>
AuthorDate: Tue Oct 7 12:20:04 2025 +0200

    KAFKA-19174 Gradle version upgrade 8 -->> 9 (#19513)
    
    List of changes:
    - prerequisite Jira ticket:
      - [KAFKA-19591](https://issues.apache.org/jira/browse/KAFKA-19591)
    - mandatory version upgrades:
      - Gradle version: 8.14.3 -->> 9.1.0
      - Gradle Shadow plugin: 8.3.6 -->> 8.3.9
      - Gradle dependencycheck plugin: 8.2.1 -->> 12.1.3
      - Gradle spotbugs plugin: 6.2.3 -->> 6.2.5
      - Gradle spotless plugin: 6.25.0 -->> 7.2.1
    - build logic will be refactored to accommodate Gradle 9 breaking
    changes
    - (optional): a dozen of Gradle plugins versions will also be upgraded
    - other JIRA tickets that had to be solved all along:
      - [KAFKA-16801](https://issues.apache.org/jira/browse/KAFKA-16801)
      - [KAFKA-19654](https://issues.apache.org/jira/browse/KAFKA-19654)
    
     **Related links:**
    - https://gradle.org/whats-new/gradle-9
    - https://github.com/gradle/gradle/releases/tag/v9.0.0
    - https://docs.gradle.org/9.0.0/release-notes.html
    - https://docs.gradle.org/9.0.0/userguide/upgrading_major_version_9.html
    - https://docs.gradle.org/9.1.0/release-notes.html
    
    Notes:
    - new Gradle version brings up some breaking changes, as always :smiley:
    - Kafka build with Gradle 9 has same issues as other projects:
      - https://github.com/redhat-developer/vscode-java/issues/4018
      - https://github.com/gradle/gradle/pull/32597
    
    Reviewers: Chia-Ping Tsai <[email protected]>
---
 .github/actions/setup-gradle/action.yml  |  2 +-
 build.gradle                             | 23 ++++++++++++------
 gradle/dependencies.gradle               |  4 ++--
 gradle/wrapper/gradle-wrapper.properties |  4 ++--
 gradlew                                  | 41 ++++++++++++++++----------------
 wrapper.gradle                           | 10 ++++----
 6 files changed, 46 insertions(+), 38 deletions(-)

diff --git a/.github/actions/setup-gradle/action.yml 
b/.github/actions/setup-gradle/action.yml
index fe456568066..47a10469cb4 100644
--- a/.github/actions/setup-gradle/action.yml
+++ b/.github/actions/setup-gradle/action.yml
@@ -42,7 +42,7 @@ runs:
         distribution: temurin
         java-version: ${{ inputs.java-version }}
     - name: Setup Gradle
-      uses: 
gradle/actions/setup-gradle@94baf225fe0a508e581a564467443d0e2379123b # v4.3.0
+      uses: 
gradle/actions/setup-gradle@748248ddd2a24f49513d8f472f81c3a07d4d50e1 # v4.4.4
       env:
         GRADLE_BUILD_ACTION_CACHE_DEBUG_ENABLED: true
       with:
diff --git a/build.gradle b/build.gradle
index b472f03bcb4..1b4444b9608 100644
--- a/build.gradle
+++ b/build.gradle
@@ -29,22 +29,21 @@ buildscript {
 }
 
 plugins {
-  id 'com.github.ben-manes.versions' version '0.48.0'
+  id 'com.github.ben-manes.versions' version '0.52.0'
   id 'idea'
   id 'jacoco'
   id 'java-library'
-  id 'org.owasp.dependencycheck' version '8.2.1'
+  id 'org.owasp.dependencycheck' version '12.1.3'
   id 'org.nosphere.apache.rat' version "0.8.1"
   id "io.swagger.core.v3.swagger-gradle-plugin" version "${swaggerVersion}"
 
-  id "com.github.spotbugs" version '6.2.3' apply false
+  id "com.github.spotbugs" version '6.2.5' apply false
   id 'org.scoverage' version '8.0.3' apply false
-  id 'com.gradleup.shadow' version '8.3.6' apply false
-  id 'com.diffplug.spotless' version "6.25.0"
+  id 'com.gradleup.shadow' version '8.3.9' apply false
+  id 'com.diffplug.spotless' version "7.2.1"
 }
 
 ext {
-  gradleVersion = versions.gradle
   minClientJavaVersion = 11
   minNonClientJavaVersion = 17
   modulesNeedingJava11 = [":clients", ":generator", ":streams", 
":streams:test-utils", ":streams:examples", ":streams-scala", 
":test-common:test-common-util"]
@@ -297,7 +296,7 @@ if (repo != null) {
 } else {
   rat.enabled = false
 }
-println("Starting build with version $version (commit id ${commitId == null ? 
"null" : commitId.take(8)}) using Gradle $gradleVersion, Java 
${JavaVersion.current()} and Scala ${versions.scala}")
+println("Starting build with version $version (commit id ${commitId == null ? 
"null" : commitId.take(8)}) using Gradle $versions.gradle, Java 
${JavaVersion.current()} and Scala ${versions.scala}")
 println("Build properties: ignoreFailures=$userIgnoreFailures, 
maxParallelForks=$maxTestForks, maxScalacThreads=$maxScalacThreads, 
maxTestRetries=$userMaxTestRetries")
 
 subprojects {
@@ -328,6 +327,16 @@ subprojects {
     tasks.register('uploadArchives').configure { dependsOn(publish) }
   }
 
+  tasks.withType(AbstractArchiveTask).configureEach {
+    reproducibleFileOrder = false
+    preserveFileTimestamps = true
+    useFileSystemPermissions()
+  }
+
+  tasks.withType(AbstractTestTask).configureEach {
+    failOnNoDiscoveredTests = false
+  }
+
   // apply the eclipse plugin only to subprojects that hold code. 'connect' is 
just a folder.
   if (!project.name.equals('connect')) {
     apply plugin: 'eclipse'
diff --git a/gradle/dependencies.gradle b/gradle/dependencies.gradle
index 31adcd2c268..9b1a42e5349 100644
--- a/gradle/dependencies.gradle
+++ b/gradle/dependencies.gradle
@@ -60,7 +60,7 @@ versions += [
   commonsLang: "3.18.0",
   commonsValidator: "1.10.0",
   classgraph: "4.8.179",
-  gradle: "8.14.3",
+  gradle: "9.1.0",
   grgit: "4.1.1",
   httpclient: "4.5.14",
   jackson: "2.19.0",
@@ -125,7 +125,7 @@ versions += [
   snappy: "1.1.10.7",
   spotbugs: "4.9.4",
   mockOAuth2Server: "2.2.1",
-  zinc: "1.9.2",
+  zinc: "1.10.8",
   // When updating the zstd version, please do as well in 
docker/native/native-image-configs/resource-config.json
   // Also make sure the compression levels in 
org.apache.kafka.common.record.CompressionType are still valid
   zstd: "1.5.6-10",
diff --git a/gradle/wrapper/gradle-wrapper.properties 
b/gradle/wrapper/gradle-wrapper.properties
index 78cb6e16a49..6a38a8cea61 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,7 +1,7 @@
 distributionBase=GRADLE_USER_HOME
 distributionPath=wrapper/dists
-distributionSha256Sum=bd71102213493060956ec229d946beee57158dbd89d0e62b91bca0fa2c5f3531
-distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-bin.zip
+distributionSha256Sum=a17ddd85a26b6a7f5ddb71ff8b05fc5104c0202c6e64782429790c933686c806
+distributionUrl=https\://services.gradle.org/distributions/gradle-9.1.0-bin.zip
 networkTimeout=10000
 validateDistributionUrl=true
 zipStoreBase=GRADLE_USER_HOME
diff --git a/gradlew b/gradlew
index f4bb3360e17..98a05d787ee 100755
--- a/gradlew
+++ b/gradlew
@@ -1,7 +1,7 @@
 #!/bin/sh
 
 #
-# Copyright © 2015-2021 the original authors.
+# Copyright © 2015 the original authors.
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -15,6 +15,8 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 #
+# SPDX-License-Identifier: Apache-2.0
+#
 
 ##############################################################################
 #
@@ -55,7 +57,7 @@
 #       Darwin, MinGW, and NonStop.
 #
 #   (3) This script is generated from the Groovy template
-#       
https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
+#       
https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
 #       within the Gradle project.
 #
 #       You can find Gradle at https://github.com/gradle/gradle/.
@@ -84,7 +86,7 @@ done
 # shellcheck disable=SC2034
 APP_BASE_NAME=${0##*/}
 # Discard cd standard output in case $CDPATH is set 
(https://github.com/gradle/gradle/issues/25036)
-APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit
+APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || 
exit
 
 # Use the maximum available, or set MAX_FD != -1 to use that value.
 MAX_FD=maximum
@@ -113,20 +115,6 @@ case "$( uname )" in                #(
 esac
 
 
-# Loop in case we encounter an error.
-for attempt in 1 2 3; do
-  if [ ! -e "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" ]; then
-    if ! curl -s -S --retry 3 -L -o 
"$APP_HOME/gradle/wrapper/gradle-wrapper.jar" 
"https://raw.githubusercontent.com/gradle/gradle/v8.14.3/gradle/wrapper/gradle-wrapper.jar";;
 then
-      rm -f "$APP_HOME/gradle/wrapper/gradle-wrapper.jar"
-      # Pause for a bit before looping in case the server throttled us.
-      sleep 5
-      continue
-    fi
-  fi
-done
-
-CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
-
 
 # Determine the Java command to use to start the JVM.
 if [ -n "$JAVA_HOME" ] ; then
@@ -183,7 +171,6 @@ fi
 # For Cygwin or MSYS, switch paths to Windows format before running java
 if "$cygwin" || "$msys" ; then
     APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
-    CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )
 
     JAVACMD=$( cygpath --unix "$JAVACMD" )
 
@@ -212,19 +199,31 @@ if "$cygwin" || "$msys" ; then
 fi
 
 
+
+# Loop in case we encounter an error.
+for attempt in 1 2 3; do
+  if [ ! -e "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" ]; then
+    if ! curl -s -S --retry 3 -L -o 
"$APP_HOME/gradle/wrapper/gradle-wrapper.jar" 
"https://raw.githubusercontent.com/gradle/gradle/v9.1.0/gradle/wrapper/gradle-wrapper.jar";;
 then
+      rm -f "$APP_HOME/gradle/wrapper/gradle-wrapper.jar"
+      # Pause for a bit before looping in case the server throttled us.
+      sleep 5
+      continue
+    fi
+  fi
+done
+
 # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to 
pass JVM options to this script.
 DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
 
 # Collect all arguments for the java command:
-#   * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not 
allowed to contain shell fragments,
+#   * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to 
contain shell fragments,
 #     and any embedded shellness will be escaped.
 #   * For example: A user cannot expect ${Hostname} to be expanded, as it is 
an environment variable and will be
 #     treated as '${Hostname}' itself on the command line.
 
 set -- \
         "-Dorg.gradle.appname=$APP_BASE_NAME" \
-        -classpath "$CLASSPATH" \
-        org.gradle.wrapper.GradleWrapperMain \
+        -jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \
         "$@"
 
 # Stop when "xargs" is not available.
diff --git a/wrapper.gradle b/wrapper.gradle
index d64aeab4de9..4cd9fc65f9d 100644
--- a/wrapper.gradle
+++ b/wrapper.gradle
@@ -23,7 +23,7 @@
 // and not the version installed on the machine running the task.
 // Read more about the wrapper here: 
https://docs.gradle.org/current/userguide/gradle_wrapper.html
 wrapper {
-    gradleVersion = project.gradleVersion
+    gradleVersion = versions.gradle
 }
 
 // Custom task to inject support for downloading the gradle wrapper jar if it 
doesn't exist.
@@ -35,14 +35,12 @@ task bootstrapWrapper() {
         def wrapperBasePath = "\$APP_HOME/gradle/wrapper"
         def wrapperJarPath = wrapperBasePath + "/gradle-wrapper.jar"
 
-        // Add a trailing zero to the version if needed.
-        def fullVersion = project.gradleVersion.count(".") == 1 ? 
"${project.gradleVersion}.0" : versions.gradle
         // Leverages the wrapper jar checked into the gradle project on github 
because the jar isn't
         // available elsewhere. Using raw.githubusercontent.com instead of 
github.com because
         // github.com servers deprecated TLSv1/TLSv1.1 support some time ago, 
so older versions
         // of curl (built against OpenSSL library that doesn't support 
TLSv1.2) would fail to
         // fetch the jar.
-        def wrapperBaseUrl = 
"https://raw.githubusercontent.com/gradle/gradle/v$fullVersion/gradle/wrapper";
+        def wrapperBaseUrl = 
"https://raw.githubusercontent.com/gradle/gradle/v$versions.gradle/gradle/wrapper";
         def wrapperJarUrl = wrapperBaseUrl + "/gradle-wrapper.jar"
 
         def bootstrapString = """
@@ -59,13 +57,15 @@ task bootstrapWrapper() {
       done
       """.stripIndent()
 
+        String putBootstrapStringAbove = "# Add default JVM options here. You 
can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script."
+
         def wrapperScript = wrapper.scriptFile
         def wrapperLines = wrapperScript.readLines()
         wrapperScript.withPrintWriter { out ->
             def bootstrapWritten = false
             wrapperLines.each { line ->
                 // Print the wrapper bootstrap before the first usage of the 
wrapper jar.
-                if (!bootstrapWritten && line.contains("gradle-wrapper.jar")) {
+                if (!bootstrapWritten && 
line.contains(putBootstrapStringAbove)) {
                     out.println(bootstrapString)
                     bootstrapWritten = true
                 }

Reply via email to