This is an automated email from the ASF dual-hosted git repository.
yuqi4733 pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/gravitino.git
The following commit(s) were added to refs/heads/main by this push:
new a408ae2d05 [#10262] refactor(build): remove release task and
centralize JDK8 compatibility (#10385)
a408ae2d05 is described below
commit a408ae2d053c124bddd83b4e422a6df1a8b6e7a5
Author: FANNG <[email protected]>
AuthorDate: Fri Mar 20 12:34:35 2026 +0900
[#10262] refactor(build): remove release task and centralize JDK8
compatibility (#10385)
### What changes were proposed in this pull request?
This PR removes the dedicated `release` Gradle task path and centralizes
JDK8 compatibility handling in the root build configuration.
1. Removed the root `release` task from `build.gradle.kts`.
2. Updated `dev/release/release-build.sh` to use `assemble` instead of
`release` for the publish preflight.
3. Updated the lightweight CI compile check to use `./gradlew assemble`.
4. Centralized JDK8-compatible project matching logic in the root
`build.gradle.kts`.
5. Simplified the JDK8-compatible module selection into a single
project-path-prefix rule.
6. Configured all JDK8-compatible projects to compile `main` sources
with `--release 8`.
7. Configured tests for those projects to resolve and compile with JDK
17 by setting `compileTestJava --release 17` and `TargetJvmVersion=17`
on test classpaths.
8. Removed duplicated test JVM compatibility wiring from
`clients/client-java/build.gradle.kts`.
9. Set `JavaCompile` encoding to `UTF-8` in the root build so existing
non-ASCII sources compile consistently across environments.
### Why are the changes needed?
Previously, producing JDK8-compatible artifacts depended on a separate
`./gradlew release` path, and the compatibility logic was split across
the root build and individual modules.
This change makes the build behavior more consistent by:
- removing the dedicated `release` task path,
- using standard Gradle `build`/`assemble` flows instead of a custom
release lifecycle,
- keeping JDK8 compatibility decisions in one place,
- compiling JDK8-targeted main artifacts consistently,
- and letting tests continue to compile and run against JDK17
dependencies where needed.
Fix: #10262
### Does this PR introduce _any_ user-facing change?
No user-facing API or property-key changes.
This is a build-system/internal compatibility cleanup.
### How was this patch tested?
Ran targeted verification for the centralized JDK8/JDK17 build behavior:
1. `./gradlew :clients:client-java:printJvm :clients:cli:printJvm
:clients:filesystem-hadoop3:printJvm :maintenance:jobs:printJvm
:spark-connector:spark-common:printJvm :flink-connector:flink:printJvm
-PskipITs`
2. `./gradlew :clients:filesystem-hadoop3:compileTestJava
:maintenance:jobs:compileTestJava :clients:client-java:compileTestJava
:spark-connector:spark-common:compileTestJava
:flink-connector:flink:compileTestJava -PskipITs --console=plain`
3. `./gradlew :api:compileJava :common:compileJava
:clients:cli:compileJava :clients:client-java:compileTestJava
:spark-connector:spark-common:compileJava
:spark-connector:spark-common:compileTestJava -PskipITs --console=plain`
4. `./gradlew :spark-connector:spark-runtime-3.5:shadowJar
--console=plain`
5. `./gradlew spotlessKotlinGradleCheck --console=plain`
6. `./gradlew :api:compileJava :clients:client-java:compileTestJava
-PskipITs --console=plain`
Also manually verified:
- `:api:compileJava` rejects a temporary Java 9 API usage at compile
time under the JDK8 target.
- The built Spark 3.5 runtime shadow jar has base class-file version 52
(Java 8) on its main classpath entries.
- There are no remaining `./gradlew release` or `gradlew release` task
invocations in the repository.
---
.github/workflows/build.yml | 5 +-
build.gradle.kts | 91 ++++++++++++++----------------------
clients/client-java/build.gradle.kts | 17 -------
dev/release/release-build.sh | 4 +-
4 files changed, 39 insertions(+), 78 deletions(-)
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index fae1b875c0..e7a4386c3d 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -84,7 +84,7 @@ jobs:
- name: Build with Gradle
run: |
- ./gradlew release -x test
+ ./gradlew assemble
# To check the spark-connector is compatible with scala2.13
spark-connector-build:
@@ -195,9 +195,6 @@ jobs:
echo "Total coverage ${{ steps.coverage.outputs.coverage-overall }}"
echo "Changed Files coverage ${{
steps.coverage.outputs.coverage-changed-files }}"
- - name: Release with Gradle
- run: ./gradlew clean && ./gradlew release -x test --rerun-tasks
-
- name: Upload unit tests report
uses: actions/upload-artifact@v4
if: failure()
diff --git a/build.gradle.kts b/build.gradle.kts
index 99c0e82034..8055f4b903 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -24,6 +24,7 @@ import
com.github.jk1.license.render.InventoryHtmlReportRenderer
import com.github.jk1.license.render.ReportRenderer
import com.github.vlsi.gradle.dsl.configureEach
import net.ltgt.gradle.errorprone.errorprone
+import org.gradle.api.attributes.java.TargetJvmVersion
import org.gradle.api.tasks.testing.logging.TestExceptionFormat
import org.gradle.internal.hash.ChecksumService
import org.gradle.internal.os.OperatingSystem
@@ -331,39 +332,23 @@ subprojects {
mavenLocal()
}
+ val jdk8CompatibleProjectPathPrefixes = setOf(
+ ":api",
+ ":common",
+ ":catalogs:catalog-common",
+ ":catalogs:hadoop-common",
+ ":maintenance:jobs",
+ ":maintenance:optimizer-api",
+ ":maintenance:updaters",
+ ":clients",
+ ":bundles",
+ ":spark-connector",
+ ":flink-connector"
+ )
+
fun compatibleWithJDK8(project: Project): Boolean {
- val name = project.name.lowercase()
val path = project.path.lowercase()
- if (path.startsWith(":maintenance:jobs") ||
- path.startsWith(":maintenance:optimizer-api") ||
- path.startsWith(":maintenance:updaters") ||
- path.startsWith(":clients:client-java") ||
- name == "api" ||
- name == "common" ||
- name == "catalog-common" ||
- name == "hadoop-common"
- ) {
- return true
- }
-
- val isReleaseRun = gradle.startParameter.taskNames.any {
- it == "release" || it == "publish" || it == "publishToMavenLocal" ||
it.endsWith(":release") || it.endsWith(
- ":publish"
- ) || it.endsWith(":publishToMavenLocal")
- }
- if (!isReleaseRun) {
- return false
- }
-
- if (path.startsWith(":client") ||
- path.startsWith(":spark-connector") ||
- path.startsWith(":flink-connector") ||
- path.startsWith(":bundles")
- ) {
- return true
- }
-
- return false
+ return jdk8CompatibleProjectPathPrefixes.any { path.startsWith(it) }
}
extensions.extraProperties.set("excludePackagesForSparkConnector",
::excludePackagesForSparkConnector)
@@ -399,12 +384,6 @@ subprojects {
}
}
- tasks.withType<JavaCompile>().configureEach {
- if (compatibleWithJDK8(project)) {
- options.release.set(8)
- }
- }
-
java {
toolchain {
// Some JDK vendors like Homebrew installed OpenJDK 17 have problems in
building trino-connector:
@@ -426,6 +405,24 @@ subprojects {
}
}
+ if (compatibleWithJDK8(project)) {
+ // Keep published/main classes Java 8-compatible for the selected modules.
+ tasks.named<JavaCompile>("compileJava") {
+ options.release.set(8)
+ }
+
+ // Tests still need Java 17 to compile against dependencies that only
publish Java 17 variants.
+ tasks.named<JavaCompile>("compileTestJava") {
+ options.release.set(17)
+ }
+
+ val targetJvmVersionAttribute =
TargetJvmVersion.TARGET_JVM_VERSION_ATTRIBUTE
+ configurations.matching { it.name in setOf("testCompileClasspath",
"testRuntimeClasspath") }
+ .configureEach {
+ attributes.attribute(targetJvmVersionAttribute, 17)
+ }
+ }
+
gradle.projectsEvaluated {
tasks.withType<JavaCompile> {
options.compilerArgs.addAll(
@@ -450,6 +447,8 @@ subprojects {
}
tasks.withType<JavaCompile>().configureEach {
+ // Keep Java compilation independent of the host's default charset.
+ options.encoding = "UTF-8"
options.errorprone.isEnabled.set(true)
options.errorprone.disableWarningsInGeneratedCode.set(true)
options.errorprone.disable(
@@ -1313,21 +1312,3 @@ fun checkOrbStackStatus() {
}
printDockerCheckInfo()
-
-tasks.register("release") {
- group = "release"
- description = "Builds and package a release version."
- doFirst {
- println("Releasing project...")
- }
-
- // Use 'assemble' instead of 'build' to skip tests during release
- // Tests have JDK version conflicts (some need JDK 8, some need JDK 17)
- // and should be run separately in CI/CD with appropriate JDK configurations
- // Only include subprojects that apply the Java plugin (exclude
client-python)
- dependsOn(
- subprojects
- .filter { it.name != "client-python" }
- .map { it.tasks.named("assemble") }
- )
-}
diff --git a/clients/client-java/build.gradle.kts
b/clients/client-java/build.gradle.kts
index 80d7093857..9a4f74a5fb 100644
--- a/clients/client-java/build.gradle.kts
+++ b/clients/client-java/build.gradle.kts
@@ -16,29 +16,12 @@
* specific language governing permissions and limitations
* under the License.
*/
-import org.gradle.api.attributes.java.TargetJvmVersion
-import org.gradle.api.tasks.compile.JavaCompile
-
plugins {
`maven-publish`
id("java")
id("idea")
}
-tasks.named<JavaCompile>("compileTestJava") {
- // client-java main artifact targets Java 8; tests depend on modules that
publish Java 17 variants.
- // Compile tests with release 17 to make Gradle variant matching for
:core/:server test classpath deterministic.
- options.release.set(17)
-}
-
-val targetJvmVersionAttribute = TargetJvmVersion.TARGET_JVM_VERSION_ATTRIBUTE
-configurations.named("testCompileClasspath") {
- attributes.attribute(targetJvmVersionAttribute, 17)
-}
-configurations.named("testRuntimeClasspath") {
- attributes.attribute(targetJvmVersionAttribute, 17)
-}
-
dependencies {
implementation(project(":api"))
implementation(project(":common")) {
diff --git a/dev/release/release-build.sh b/dev/release/release-build.sh
index 0800453c24..cc461f3bfe 100755
--- a/dev/release/release-build.sh
+++ b/dev/release/release-build.sh
@@ -348,8 +348,8 @@ if [[ "$1" == "publish-release" ]]; then
cd ..
$GRADLE clean
- $GRADLE release -x test -PdefaultScalaVersion=2.12
- $GRADLE release -x test -PdefaultScalaVersion=2.13
+ $GRADLE assemble -PdefaultScalaVersion=2.12
+ $GRADLE assemble -PdefaultScalaVersion=2.13
$GRADLE -Dmaven.repo.local=$tmp_repo publishToMavenLocal
-PdefaultScalaVersion=2.12
$GRADLE -Dmaven.repo.local=$tmp_repo publishToMavenLocal
-PdefaultScalaVersion=2.13