diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index fc5ee1bd7558b..5137f8bf37292 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -127,7 +127,7 @@ jobs: - name: Setup Gradle uses: ./.github/actions/setup-gradle with: - java-version: 23 + java-version: 24 gradle-cache-read-only: ${{ !inputs.is-trunk }} gradle-cache-write-only: ${{ inputs.is-trunk }} develocity-access-key: ${{ secrets.DEVELOCITY_ACCESS_KEY }} @@ -181,7 +181,7 @@ jobs: fail-fast: false matrix: # If we change these, make sure to adjust ci-complete.yml - java: [ 23, 17 ] + java: [ 24, 17 ] run-flaky: [ true, false ] run-new: [ true, false ] exclude: @@ -270,7 +270,7 @@ jobs: python .github/scripts/junit.py \ --path build/junit-xml >> $GITHUB_STEP_SUMMARY - # This job downloads all the JUnit XML files and thread dumps from the JDK 23 test runs. + # This job downloads all the JUnit XML files and thread dumps from the JDK 24 test runs. # If any test job fails, we will not run this job. Also, if any thread dump artifacts # are present, this means there was a timeout in the tests and so we will not proceed # with catalog creation. @@ -288,7 +288,7 @@ jobs: - name: Download Thread Dumps uses: actions/download-artifact@v4 with: - pattern: junit-thread-dumps-23-* + pattern: junit-thread-dumps-24-* path: thread-dumps merge-multiple: true - name: Check For Thread Dump @@ -302,7 +302,7 @@ jobs: - name: Download JUnit XMLs uses: actions/download-artifact@v4 with: - pattern: junit-xml-23-* # Only look at JDK 23 tests for the test catalog + pattern: junit-xml-24-* # Only look at JDK 24 tests for the test catalog path: junit-xml merge-multiple: true - name: Collate Test Catalog diff --git a/.github/workflows/ci-complete.yml b/.github/workflows/ci-complete.yml index 8855c998df28b..44d4f5a9c1d62 100644 --- a/.github/workflows/ci-complete.yml +++ b/.github/workflows/ci-complete.yml @@ -44,7 +44,7 @@ jobs: fail-fast: false matrix: # Make sure these match build.yml - java: [ 23, 17 ] + java: [ 24, 17 ] run-flaky: [ true, false ] run-new: [ true, false ] exclude: diff --git a/LICENSE-binary b/LICENSE-binary index 09e226835e655..e813f434a3a56 100644 --- a/LICENSE-binary +++ b/LICENSE-binary @@ -247,9 +247,9 @@ License Version 2.0: - opentelemetry-proto-1.0.0-alpha - plexus-utils-3.5.1 - rocksdbjni-9.7.3 -- scala-library-2.13.15 +- scala-library-2.13.16 - scala-logging_2.13-3.9.5 -- scala-reflect-2.13.15 +- scala-reflect-2.13.16 - snappy-java-1.1.10.5 - snakeyaml-2.2 - swagger-annotations-2.2.25 diff --git a/README.md b/README.md index 4c2fc4e1f160b..8b5fe4c332ed2 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ You need to have [Java](http://www.oracle.com/technetwork/java/javase/downloads/index.html) installed. -We build and test Apache Kafka with 17 and 23. The `release` parameter in javac is set to `11` for the clients +We build and test Apache Kafka with 17 and 24. The `release` parameter in javac is set to `11` for the clients and streams modules, and `17` for the rest, ensuring compatibility with their respective minimum Java versions. Similarly, the `release` parameter in scalac is set to `11` for the streams modules and `17` for the rest. diff --git a/bin/kafka-run-class.sh b/bin/kafka-run-class.sh index 3463389d3c005..90b6e4e4c28bf 100755 --- a/bin/kafka-run-class.sh +++ b/bin/kafka-run-class.sh @@ -49,7 +49,7 @@ should_include_file() { base_dir=$(dirname $0)/.. if [ -z "$SCALA_VERSION" ]; then - SCALA_VERSION=2.13.15 + SCALA_VERSION=2.13.16 if [[ -f "$base_dir/gradle.properties" ]]; then SCALA_VERSION=`grep "^scalaVersion=" "$base_dir/gradle.properties" | cut -d= -f 2` fi diff --git a/bin/windows/kafka-run-class.bat b/bin/windows/kafka-run-class.bat index ca151e5df96ed..9994d501700eb 100755 --- a/bin/windows/kafka-run-class.bat +++ b/bin/windows/kafka-run-class.bat @@ -27,7 +27,7 @@ set BASE_DIR=%CD% popd IF ["%SCALA_VERSION%"] EQU [""] ( - set SCALA_VERSION=2.13.15 + set SCALA_VERSION=2.13.16 ) IF ["%SCALA_BINARY_VERSION%"] EQU [""] ( diff --git a/build.gradle b/build.gradle index 36ced29d0bd61..12abb4c48e2d4 100644 --- a/build.gradle +++ b/build.gradle @@ -37,7 +37,7 @@ plugins { 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.0.25' apply false + id "com.github.spotbugs" version '6.1.7' 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" @@ -163,6 +163,7 @@ ext { allprojects { repositories { + mavenLocal() mavenCentral() } diff --git a/docs/documentation/compatibility.html b/docs/documentation/compatibility.html index e1b5134ea40fa..d191a8bbecb94 100644 --- a/docs/documentation/compatibility.html +++ b/docs/documentation/compatibility.html @@ -30,7 +30,7 @@

JDK Compatibility Across Kafka Versions

Kafka Version Java 11 Java 17 - Java 23 + Java 24 Clients @@ -198,4 +198,4 @@

Client/Broker Forward Compatibility

- \ No newline at end of file + diff --git a/gradle.properties b/gradle.properties index 46bfc41b7e1aa..52bf115819de5 100644 --- a/gradle.properties +++ b/gradle.properties @@ -24,7 +24,7 @@ group=org.apache.kafka # - streams/quickstart/java/src/main/resources/archetype-resources/pom.xml # - streams/quickstart/java/pom.xml version=4.1.0-SNAPSHOT -scalaVersion=2.13.15 +scalaVersion=2.13.16 # Adding swaggerVersion in gradle.properties to have a single version in place for swagger swaggerVersion=2.2.25 task=build diff --git a/gradle/dependencies.gradle b/gradle/dependencies.gradle index 23df24bc479be..733ae3c0d5d4c 100644 --- a/gradle/dependencies.gradle +++ b/gradle/dependencies.gradle @@ -23,7 +23,7 @@ ext { } // Add Scala version -def defaultScala213Version = '2.13.15' +def defaultScala213Version = '2.13.16' if (hasProperty('scalaVersion')) { if (scalaVersion == '2.13') { versions["scala"] = defaultScala213Version @@ -121,7 +121,7 @@ versions += [ scoverage: "2.0.11", slf4j: "1.7.36", snappy: "1.1.10.5", - spotbugs: "4.8.6", + spotbugs: "4.9.4-SNAPSHOT", zinc: "1.9.2", // 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 diff --git a/gradle/spotbugs-exclude.xml b/gradle/spotbugs-exclude.xml index 080681e8db376..1419d8f3fa72a 100644 --- a/gradle/spotbugs-exclude.xml +++ b/gradle/spotbugs-exclude.xml @@ -550,4 +550,153 @@ For a detailed description of spotbugs bug categories, see https://spotbugs.read + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/gradlew b/gradlew index b377d46f9e967..8a2c0a948b419 100755 --- a/gradlew +++ b/gradlew @@ -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 @@ -112,20 +114,7 @@ case "$( uname )" in #( NONSTOP* ) nonstop=true ;; 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.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 - -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar +CLASSPATH="\\\"\\\"" # Determine the Java command to use to start the JVM. @@ -216,7 +205,7 @@ fi 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. @@ -224,7 +213,7 @@ DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' 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. @@ -259,4 +248,17 @@ eval "set -- $( tr '\n' ' ' )" '"$@"' + +# 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.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 + exec "$JAVACMD" "$@" diff --git a/wrapper.gradle b/wrapper.gradle index 2dfca19e74f71..ffc35ee2f28f5 100644 --- a/wrapper.gradle +++ b/wrapper.gradle @@ -65,8 +65,8 @@ task bootstrapWrapper() { 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")) { + // Print the wrapper bootstrap before the script execs the wrapper jar. + if (!bootstrapWritten && line.startsWith("exec ")) { out.println(bootstrapString) bootstrapWritten = true }