Skip to content
2 changes: 1 addition & 1 deletion aws-bundle/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ project(":iceberg-aws-bundle") {

shadowJar {
archiveClassifier.set(null)
zip64 true
zip64 = true

// include the LICENSE and NOTICE files for the shaded Jar
from(projectDir) {
Expand Down
2 changes: 1 addition & 1 deletion azure-bundle/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ project(":iceberg-azure-bundle") {

shadowJar {
archiveClassifier.set(null)
zip64 true
zip64 = true

// include the LICENSE and NOTICE files for the shaded Jar
from(projectDir) {
Expand Down
1 change: 0 additions & 1 deletion baseline.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,6 @@ subprojects {

// Thus we concede to applying all of the Baseline plugins individually on all the projects we are
// ready to enforce linting on.
Copy link

Copilot AI Feb 10, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This PR removes application of org.inferred.processors and com.palantir.baseline-exact-dependencies. Since that changes build enforcement/behavior (annotation processor handling and dependency verification), add a short comment here explaining why they were removed for the Gradle 9.3.1 upgrade (e.g., incompatibility/removal), and whether there is a replacement mechanism or intentional relaxation.

Suggested change
// ready to enforce linting on.
// ready to enforce linting on.
// Note: as part of the Gradle 9.3.1 upgrade we stopped applying the org.inferred.processors and
// com.palantir.baseline-exact-dependencies plugins because they are no longer compatible / supported.
// We now rely on Gradle's built-in annotation processor handling and dependency verification, which
// is an intentional relaxation compared to the previous Baseline enforcement.

Copilot uses AI. Check for mistakes.
apply plugin: 'org.inferred.processors'
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

what's the alternative to that plugin and the other one that's being removed? For reviewers it would be good to know why those are being removed

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

inferred plugin doesn't support Gradle 9.
I didn't find any alternative.

As all palantir gradle plugins, no change in the last 4 years.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The alternative is to use the native annotationProcessor provided by Gradle. This is what this PR is leveraging.

if (!project.hasProperty('quick')) {
apply plugin: 'com.palantir.baseline-checkstyle'
apply plugin: 'com.palantir.baseline-error-prone'
Expand Down
20 changes: 20 additions & 0 deletions bom/build.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/

// This file is intentionally minimal - BOM configuration is in root build.gradle
41 changes: 23 additions & 18 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,6 @@ buildscript {
classpath 'com.gradleup.shadow:shadow-gradle-plugin:8.3.9'
classpath 'com.palantir.baseline:gradle-baseline-java:6.90.0'
classpath 'com.diffplug.spotless:spotless-plugin-gradle:8.2.1'
classpath 'gradle.plugin.org.inferred:gradle-processors:3.7.0'
classpath 'me.champeau.jmh:jmh-gradle-plugin:0.7.3'
classpath 'gradle.plugin.io.morethan.jmhreport:gradle-jmh-report:0.9.6'
classpath "com.github.alisiikh:gradle-scalastyle-plugin:3.5.0"
Expand Down Expand Up @@ -250,7 +249,7 @@ subprojects {
} else {
events "failed"
}
exceptionFormat "full"
exceptionFormat = "full"
}

systemProperty 'project.version', project.version
Expand Down Expand Up @@ -285,7 +284,7 @@ project(':iceberg-bundled-guava') {
shadowJar {
archiveClassifier.set(null)
configurations = [project.configurations.compileClasspath]
zip64 true
zip64 = true

// include the LICENSE and NOTICE files for the shaded Jar
from(projectDir) {
Expand Down Expand Up @@ -440,7 +439,7 @@ project(':iceberg-data') {
test {
useJUnitPlatform()
// Only for TestSplitScan as of Gradle 5.0+
maxHeapSize '1500m'
maxHeapSize = '1500m'
}
}

Expand Down Expand Up @@ -618,9 +617,23 @@ project(':iceberg-delta-lake') {
test {
useJUnitPlatform()
}
configurations {
integrationImplementation.extendsFrom testImplementation
integrationRuntime.extendsFrom testRuntimeOnly

// The newest version of delta-core uses Spark 3.5.*. Define integration source set and config
// before dependencies so integrationImplementation exists when dependencies are applied.
if (sparkVersions.contains("3.5")) {
sourceSets {
integration {
java.srcDir "$projectDir/src/integration/java"
resources.srcDir "$projectDir/src/integration/resources"
compileClasspath += main.output + test.output
runtimeClasspath += main.output + test.output
}
}

configurations {
integrationImplementation.extendsFrom testImplementation
integrationRuntime.extendsFrom testRuntimeOnly
}
}

dependencies {
Expand Down Expand Up @@ -671,15 +684,6 @@ project(':iceberg-delta-lake') {
// The newest version of delta-core uses Spark 3.5.*. The integration test should only be built
// if iceberg-spark-3.5 is available
if (sparkVersions.contains("3.5")) {
sourceSets {
integration {
java.srcDir "$projectDir/src/integration/java"
resources.srcDir "$projectDir/src/integration/resources"
compileClasspath += main.output + test.output
runtimeClasspath += main.output + test.output
}
}

task integrationTest(type: Test) {
useJUnitPlatform()
testClassesDirs = sourceSets.integration.output.classesDirs
Expand Down Expand Up @@ -1041,7 +1045,8 @@ project(':iceberg-open-api') {
dependencies {
testImplementation project(':iceberg-api')
testImplementation project(':iceberg-core')
testImplementation project(':iceberg-core').sourceSets.test.runtimeClasspath
testImplementation project(path: ':iceberg-core', configuration: 'testArtifacts')
testImplementation project(path: ':iceberg-api', configuration: 'testArtifacts')
testImplementation(testFixtures(project(':iceberg-open-api')))

testImplementation libs.junit.jupiter
Expand Down Expand Up @@ -1125,7 +1130,7 @@ project(':iceberg-open-api') {
archiveClassifier.set(null)
configurations = [project.configurations.testFixturesRuntimeClasspath]
from sourceSets.testFixtures.output
zip64 true
zip64 = true

// include the LICENSE and NOTICE files for the runtime Jar
from(projectDir) {
Expand Down
8 changes: 4 additions & 4 deletions deploy.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -33,13 +33,13 @@ subprojects {
task sourceJar(type: Jar, dependsOn: classes) {
archiveClassifier.set('sources')
from sourceSets.main.allSource
group 'build'
group = 'build'
}

task javadocJar(type: Jar, dependsOn: javadoc) {
archiveClassifier.set('javadoc')
from javadoc.destinationDir
Copy link

Copilot AI Feb 10, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This references javadoc.destinationDir, which is deprecated/likely removed in newer Gradle versions. Use javadoc.destinationDirectory (and convert to a File only if needed, e.g., via .get().asFile) to keep the javadocJar task compatible with Gradle 9.x.

Suggested change
from javadoc.destinationDir
from javadoc.destinationDirectory.get().asFile

Copilot uses AI. Check for mistakes.
group 'build'
group = 'build'
}

task testJar(type: Jar) {
Expand Down Expand Up @@ -124,8 +124,8 @@ subprojects {
repositories {
maven {
credentials {
username project.hasProperty('mavenUser') ? "$mavenUser" : ""
password project.hasProperty('mavenPassword') ? "$mavenPassword" : ""
username = project.hasProperty('mavenUser') ? "$mavenUser" : ""
password = project.hasProperty('mavenPassword') ? "$mavenPassword" : ""
}
// upload to the releases repository using ./gradlew -Prelease publish
def apacheSnapshotsRepoUrl = 'https://repository.apache.org/content/repositories/snapshots'
Expand Down
9 changes: 7 additions & 2 deletions flink/v1.20/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -176,14 +176,16 @@ project(":iceberg-flink:iceberg-flink-runtime-${flinkMajorVersion}") {
// all of those dependencies are required because the integration test extends FlinkTestBase
integrationCompileOnly project(':iceberg-api')
integrationImplementation libs.assertj.core
integrationImplementation libs.junit.jupiter
integrationImplementation libs.junit.platform.launcher
integrationImplementation project(path: ":iceberg-flink:iceberg-flink-${flinkMajorVersion}", configuration: "testArtifacts")
integrationImplementation project(path: ':iceberg-api', configuration: 'testArtifacts')
integrationImplementation project(path: ':iceberg-hive-metastore', configuration: 'testArtifacts')
integrationImplementation(libs.flink120.test.utils) {
exclude group: "org.apache.curator", module: 'curator-test'
exclude group: 'junit'
}

integrationImplementation libs.flink120.connector.base
integrationImplementation libs.flink120.table.api.java.bridge
integrationImplementation "org.apache.flink:flink-table-planner_${scalaVersion}:${libs.versions.flink120.get()}"

Expand Down Expand Up @@ -226,7 +228,7 @@ project(":iceberg-flink:iceberg-flink-runtime-${flinkMajorVersion}") {
shadowJar {
configurations = [project.configurations.runtimeClasspath]

zip64 true
zip64 = true

// include the LICENSE and NOTICE files for the shaded Jar
from(projectDir) {
Expand Down Expand Up @@ -255,6 +257,9 @@ project(":iceberg-flink:iceberg-flink-runtime-${flinkMajorVersion}") {
task integrationTest(type: Test) {
description = "Test Flink Runtime Jar against Flink ${flinkMajorVersion}"
group = "verification"
useJUnitPlatform {
excludeEngines "junit-vintage"
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

can you please add some details about the issue that requires this change for better understanding?

}
jvmArgs += project.property('extraJvmArgs')
testClassesDirs = sourceSets.integration.output.classesDirs
classpath = sourceSets.integration.runtimeClasspath + files(shadowJar.archiveFile.get().asFile.path)
Expand Down
4 changes: 2 additions & 2 deletions flink/v2.0/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -181,9 +181,9 @@ project(":iceberg-flink:iceberg-flink-runtime-${flinkMajorVersion}") {
integrationImplementation project(path: ':iceberg-hive-metastore', configuration: 'testArtifacts')
integrationImplementation(libs.flink20.test.utils) {
exclude group: "org.apache.curator", module: 'curator-test'
exclude group: 'junit'
}

integrationImplementation libs.flink20.connector.base
integrationImplementation libs.flink20.table.api.java.bridge
integrationImplementation "org.apache.flink:flink-table-planner_${scalaVersion}:${libs.versions.flink20.get()}"

Expand Down Expand Up @@ -226,7 +226,7 @@ project(":iceberg-flink:iceberg-flink-runtime-${flinkMajorVersion}") {
shadowJar {
configurations = [project.configurations.runtimeClasspath]

zip64 true
zip64 = true

// include the LICENSE and NOTICE files for the shaded Jar
from(projectDir) {
Expand Down
9 changes: 7 additions & 2 deletions flink/v2.1/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -176,14 +176,16 @@ project(":iceberg-flink:iceberg-flink-runtime-${flinkMajorVersion}") {
// all of those dependencies are required because the integration test extends FlinkTestBase
integrationCompileOnly project(':iceberg-api')
integrationImplementation libs.assertj.core
integrationImplementation libs.junit.jupiter
integrationImplementation libs.junit.platform.launcher
integrationImplementation project(path: ":iceberg-flink:iceberg-flink-${flinkMajorVersion}", configuration: "testArtifacts")
integrationImplementation project(path: ':iceberg-api', configuration: 'testArtifacts')
integrationImplementation project(path: ':iceberg-hive-metastore', configuration: 'testArtifacts')
integrationImplementation(libs.flink21.test.utils) {
exclude group: "org.apache.curator", module: 'curator-test'
exclude group: 'junit'
}

integrationImplementation libs.flink21.connector.base
integrationImplementation libs.flink21.table.api.java.bridge
integrationImplementation "org.apache.flink:flink-table-planner_${scalaVersion}:${libs.versions.flink21.get()}"

Expand Down Expand Up @@ -226,7 +228,7 @@ project(":iceberg-flink:iceberg-flink-runtime-${flinkMajorVersion}") {
shadowJar {
configurations = [project.configurations.runtimeClasspath]

zip64 true
zip64 = true
Comment thread
jbonofre marked this conversation as resolved.

// include the LICENSE and NOTICE files for the shaded Jar
from(projectDir) {
Expand Down Expand Up @@ -255,6 +257,9 @@ project(":iceberg-flink:iceberg-flink-runtime-${flinkMajorVersion}") {
task integrationTest(type: Test) {
description = "Test Flink Runtime Jar against Flink ${flinkMajorVersion}"
group = "verification"
useJUnitPlatform {
excludeEngines "junit-vintage"
}
jvmArgs += project.property('extraJvmArgs')
testClassesDirs = sourceSets.integration.output.classesDirs
classpath = sourceSets.integration.runtimeClasspath + files(shadowJar.archiveFile.get().asFile.path)
Expand Down
2 changes: 1 addition & 1 deletion gcp-bundle/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ project(":iceberg-gcp-bundle") {

shadowJar {
archiveClassifier.set(null)
zip64 true
zip64 = true

// include the LICENSE and NOTICE files for the shaded Jar
from(projectDir) {
Expand Down
4 changes: 2 additions & 2 deletions gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionSha256Sum=f1771298a70f6db5a29daf62378c4e18a17fc33c9ba6b14362e0cdf40610380d
distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.4-bin.zip
distributionSha256Sum=b266d5ff6b90eada6dc3b20cb090e3731302e553a27c5d3e4df1f0d76beaff06
distributionUrl=https\://services.gradle.org/distributions/gradle-9.3.1-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
Expand Down
2 changes: 1 addition & 1 deletion mr/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ project(':iceberg-mr') {

test {
// testJoinTables / testScanTable
maxHeapSize '2500m'
maxHeapSize = '2500m'
}
}

2 changes: 1 addition & 1 deletion spark/v3.4/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -287,7 +287,7 @@ project(":iceberg-spark:iceberg-spark-runtime-${sparkMajorVersion}_${scalaVersio
shadowJar {
configurations = [project.configurations.runtimeClasspath]

zip64 true
zip64 = true

// include the LICENSE and NOTICE files for the shaded Jar
from(projectDir) {
Expand Down
2 changes: 1 addition & 1 deletion spark/v3.5/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -289,7 +289,7 @@ project(":iceberg-spark:iceberg-spark-runtime-${sparkMajorVersion}_${scalaVersio
shadowJar {
configurations = [project.configurations.runtimeClasspath]

zip64 true
zip64 = true

// include the LICENSE and NOTICE files for the shaded Jar
from(projectDir) {
Expand Down
4 changes: 2 additions & 2 deletions spark/v4.0/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,7 @@ project(":iceberg-spark:iceberg-spark-${sparkMajorVersion}_${scalaVersion}") {

tasks.withType(Test) {
// Vectorized reads need more memory
maxHeapSize '3160m'
maxHeapSize = '3160m'
}
}

Expand Down Expand Up @@ -298,7 +298,7 @@ project(":iceberg-spark:iceberg-spark-runtime-${sparkMajorVersion}_${scalaVersio
shadowJar {
configurations = [project.configurations.runtimeClasspath]

zip64 true
zip64 = true

// include the LICENSE and NOTICE files for the shaded Jar
from(projectDir) {
Expand Down
4 changes: 2 additions & 2 deletions spark/v4.1/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -133,7 +133,7 @@ project(":iceberg-spark:iceberg-spark-${sparkMajorVersion}_${scalaVersion}") {

tasks.withType(Test) {
// Vectorized reads need more memory
maxHeapSize '3160m'
maxHeapSize = '3160m'
}
}

Expand Down Expand Up @@ -300,7 +300,7 @@ project(":iceberg-spark:iceberg-spark-runtime-${sparkMajorVersion}_${scalaVersio
shadowJar {
configurations = [project.configurations.runtimeClasspath]

zip64 true
zip64 = true

// include the LICENSE and NOTICE files for the shaded Jar
from(projectDir) {
Expand Down
2 changes: 1 addition & 1 deletion tasks.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ task aggregateJavadoc(type: Javadoc) {
def javadocTasks = subprojects.findAll { it.name != 'iceberg-bom' }.javadoc
dependsOn javadocTasks
source javadocTasks.source
destinationDir project.rootProject.file("site/docs/javadoc/${getJavadocVersion()}")
destinationDir = project.rootProject.file("site/docs/javadoc/${getJavadocVersion()}")
classpath = project.rootProject.files(javadocTasks.classpath)

final JAVADOC_FIX_SEARCH_STR = '\n\n' +
Expand Down
Loading