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

fanng 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 63d176b800 [#10373] fix(client): Support runing JDK8 with Gravitino 
client (#10376)
63d176b800 is described below

commit 63d176b80014bd91dd00bfe7c1ad5c5fe9365391
Author: Qi Yu <[email protected]>
AuthorDate: Thu Mar 12 11:25:44 2026 +0800

    [#10373] fix(client): Support runing JDK8 with Gravitino client (#10376)
    
    ### What changes were proposed in this pull request?
    
    This PR fixes build-breakers found by repeatedly running:
    
    `./gradlew release -x test --rerun-tasks`
    
    Key fixes:
    - Replace Java 11+ API usage with Java 8 compatible code:
      - `Map.of()` -> `Collections.emptyMap()`
    
    ### Why are the changes needed?
    
    The release task failed due to Java compatibility compile errors in
    modules compiled with Java 8 target.
    
    Fixes: #10373
    
    ### Does this PR introduce _any_ user-facing change?
    
    No.
    
    ### How was this patch tested?
    
    - Repeatedly executed `./gradlew release -x test --rerun-tasks`
    - Confirmed final run succeeded with `BUILD SUCCESSFUL`.
    
    ---------
    
    Co-authored-by: Copilot <[email protected]>
---
 .../org/apache/gravitino/rel/indexes/Indexes.java  |  4 +--
 .../gravitino/policy/TestPolicyContents.java       | 22 +++++++++---
 build.gradle.kts                                   |  6 ++++
 .../apache/gravitino/dto/rel/indexes/IndexDTO.java |  3 +-
 .../gravitino/dto/responses/DeleteResponse.java    |  2 +-
 .../java/org/apache/gravitino/json/JsonUtils.java  |  2 +-
 .../gravitino/utils/jdbc/JdbcSqlScriptUtils.java   |  2 +-
 .../org/apache/gravitino/json/TestSerializer.java  |  6 ++--
 .../apache/gravitino/utils/TestJdbcUrlUtils.java   | 36 ++++++++++++-------
 .../flink/connector/catalog/BaseCatalog.java       |  2 +-
 .../jobs/BuiltInJobTemplateProvider.java           |  2 +-
 .../jobs/iceberg/TestIcebergUpdateStatsJob.java    | 20 +++++------
 .../TestIcebergUpdateStatsJobWithSpark.java        | 42 ++++++++++++----------
 .../common/util/TestPartitionPathSerdeUtils.java   |  4 +--
 14 files changed, 95 insertions(+), 58 deletions(-)

diff --git a/api/src/main/java/org/apache/gravitino/rel/indexes/Indexes.java 
b/api/src/main/java/org/apache/gravitino/rel/indexes/Indexes.java
index 01d6e1bfe7..79fe95ef01 100644
--- a/api/src/main/java/org/apache/gravitino/rel/indexes/Indexes.java
+++ b/api/src/main/java/org/apache/gravitino/rel/indexes/Indexes.java
@@ -110,7 +110,7 @@ public class Indexes {
    * @return An {@link Index} instance with empty properties
    */
   public static Index of(IndexType indexType, String name, String[][] 
fieldNames) {
-    return of(indexType, name, fieldNames, Map.of());
+    return of(indexType, name, fieldNames, ImmutableMap.of());
   }
 
   /**
@@ -156,7 +156,7 @@ public class Indexes {
       this.indexType = indexType;
       this.name = name;
       this.fieldNames = fieldNames;
-      this.properties = properties == null ? Map.of() : properties;
+      this.properties = properties == null ? ImmutableMap.of() : properties;
     }
 
     /**
diff --git 
a/api/src/test/java/org/apache/gravitino/policy/TestPolicyContents.java 
b/api/src/test/java/org/apache/gravitino/policy/TestPolicyContents.java
index 702515d14b..1112846146 100644
--- a/api/src/test/java/org/apache/gravitino/policy/TestPolicyContents.java
+++ b/api/src/test/java/org/apache/gravitino/policy/TestPolicyContents.java
@@ -20,6 +20,7 @@
 package org.apache.gravitino.policy;
 
 import com.google.common.collect.ImmutableSet;
+import java.util.HashMap;
 import java.util.Map;
 import org.apache.gravitino.MetadataObject;
 import org.junit.jupiter.api.Assertions;
@@ -51,7 +52,7 @@ public class TestPolicyContents {
     IcebergDataCompactionContent content =
         (IcebergDataCompactionContent)
             PolicyContents.icebergDataCompaction(
-                1000L, 1L, Map.of("target-file-size-bytes", "1048576", 
"min-input-files", "1"));
+                1000L, 1L, mapOf("target-file-size-bytes", "1048576", 
"min-input-files", "1"));
 
     Assertions.assertEquals("iceberg-data-compaction", 
content.properties().get("strategy.type"));
     Assertions.assertEquals(
@@ -86,7 +87,7 @@ public class TestPolicyContents {
                 3L,
                 200L,
                 88L,
-                Map.of("target-file-size-bytes", "1048576", "min-input-files", 
"1"));
+                mapOf("target-file-size-bytes", "1048576", "min-input-files", 
"1"));
 
     Assertions.assertEquals(3L, content.rules().get("dataFileMseWeight"));
     Assertions.assertEquals(200L, 
content.rules().get("deleteFileNumberWeight"));
@@ -99,7 +100,7 @@ public class TestPolicyContents {
     IcebergDataCompactionContent content =
         (IcebergDataCompactionContent)
             PolicyContents.icebergDataCompaction(
-                1000L, 1L, Map.of("job.options.target-file-size-bytes", 
"1048576"));
+                1000L, 1L, mapOf("job.options.target-file-size-bytes", 
"1048576"));
 
     IllegalArgumentException exception =
         Assertions.assertThrows(IllegalArgumentException.class, 
content::validate);
@@ -111,10 +112,23 @@ public class TestPolicyContents {
     IcebergDataCompactionContent content =
         (IcebergDataCompactionContent)
             PolicyContents.icebergDataCompaction(
-                1000L, 1L, 2L, 10L, 0L, Map.of("target-file-size-bytes", 
"1048576"));
+                1000L, 1L, 2L, 10L, 0L, mapOf("target-file-size-bytes", 
"1048576"));
 
     IllegalArgumentException exception =
         Assertions.assertThrows(IllegalArgumentException.class, 
content::validate);
     Assertions.assertTrue(exception.getMessage().contains("maxPartitionNum"));
   }
+
+  private static Map<String, String> mapOf(String key, String value) {
+    Map<String, String> map = new HashMap<>();
+    map.put(key, value);
+    return map;
+  }
+
+  private static Map<String, String> mapOf(String key1, String value1, String 
key2, String value2) {
+    Map<String, String> map = new HashMap<>();
+    map.put(key1, value1);
+    map.put(key2, value2);
+    return map;
+  }
 }
diff --git a/build.gradle.kts b/build.gradle.kts
index f7f83f3a46..864b5fb781 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -399,6 +399,12 @@ 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:
diff --git 
a/common/src/main/java/org/apache/gravitino/dto/rel/indexes/IndexDTO.java 
b/common/src/main/java/org/apache/gravitino/dto/rel/indexes/IndexDTO.java
index 8b134d5c53..6cb9191bc6 100644
--- a/common/src/main/java/org/apache/gravitino/dto/rel/indexes/IndexDTO.java
+++ b/common/src/main/java/org/apache/gravitino/dto/rel/indexes/IndexDTO.java
@@ -21,6 +21,7 @@ package org.apache.gravitino.dto.rel.indexes;
 import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import com.google.common.base.Preconditions;
+import com.google.common.collect.ImmutableMap;
 import java.util.Arrays;
 import java.util.Map;
 import java.util.Objects;
@@ -57,7 +58,7 @@ public class IndexDTO implements Index {
     this.indexType = indexType;
     this.name = name;
     this.fieldNames = fieldNames;
-    this.properties = properties == null ? Map.of() : properties;
+    this.properties = properties == null ? ImmutableMap.of() : properties;
   }
 
   /**
diff --git 
a/common/src/main/java/org/apache/gravitino/dto/responses/DeleteResponse.java 
b/common/src/main/java/org/apache/gravitino/dto/responses/DeleteResponse.java
index 77f312cc76..4aa59048d1 100644
--- 
a/common/src/main/java/org/apache/gravitino/dto/responses/DeleteResponse.java
+++ 
b/common/src/main/java/org/apache/gravitino/dto/responses/DeleteResponse.java
@@ -26,7 +26,7 @@ import lombok.ToString;
  * Represents a response for a delete operation. This class is deprecated and 
will be removed in
  * future versions, please use {@link DropResponse} instead.
  */
-@Deprecated(since = "1.0.0")
+@Deprecated
 @ToString
 @EqualsAndHashCode(callSuper = true)
 public class DeleteResponse extends BaseResponse {
diff --git a/common/src/main/java/org/apache/gravitino/json/JsonUtils.java 
b/common/src/main/java/org/apache/gravitino/json/JsonUtils.java
index d104b7253b..2b664acc36 100644
--- a/common/src/main/java/org/apache/gravitino/json/JsonUtils.java
+++ b/common/src/main/java/org/apache/gravitino/json/JsonUtils.java
@@ -1507,7 +1507,7 @@ public class JsonUtils {
       node.get(INDEX_FIELD_NAMES)
           .forEach(field -> fieldNames.add(getStringArray((ArrayNode) field)));
       builder.withFieldNames(fieldNames.toArray(new String[0][0]));
-      Map<String, String> properties = Map.of();
+      Map<String, String> properties = ImmutableMap.of();
 
       if (node.has("properties") && node.get("properties").isObject()) {
 
diff --git 
a/common/src/main/java/org/apache/gravitino/utils/jdbc/JdbcSqlScriptUtils.java 
b/common/src/main/java/org/apache/gravitino/utils/jdbc/JdbcSqlScriptUtils.java
index decf8a5fae..a7b63d9c92 100644
--- 
a/common/src/main/java/org/apache/gravitino/utils/jdbc/JdbcSqlScriptUtils.java
+++ 
b/common/src/main/java/org/apache/gravitino/utils/jdbc/JdbcSqlScriptUtils.java
@@ -50,7 +50,7 @@ public final class JdbcSqlScriptUtils {
     return Arrays.stream(executableSql.split(";"))
         .map(String::trim)
         .filter(s -> !s.isEmpty())
-        .toList();
+        .collect(Collectors.toList());
   }
 
   /**
diff --git a/common/src/test/java/org/apache/gravitino/json/TestSerializer.java 
b/common/src/test/java/org/apache/gravitino/json/TestSerializer.java
index efb08de177..d6faff1f5a 100644
--- a/common/src/test/java/org/apache/gravitino/json/TestSerializer.java
+++ b/common/src/test/java/org/apache/gravitino/json/TestSerializer.java
@@ -20,6 +20,7 @@
 package org.apache.gravitino.json;
 
 import com.fasterxml.jackson.core.JsonProcessingException;
+import com.google.common.collect.ImmutableMap;
 import java.util.Map;
 import org.apache.gravitino.dto.rel.DistributionDTO;
 import org.apache.gravitino.dto.rel.SortOrderDTO;
@@ -139,10 +140,7 @@ public class TestSerializer {
             + "\"fieldNames\":[[\"col1\"],[\"col2\"]],\"properties\":{}}";
     Assertions.assertEquals(expectedJson, actualJson);
 
-    Map<String, String> props =
-        Map.of(
-            "compression", "lz4",
-            "level", "high");
+    Map<String, String> props = ImmutableMap.of("compression", "lz4", "level", 
"high");
     index =
         (IndexImpl)
             Indexes.of(
diff --git 
a/common/src/test/java/org/apache/gravitino/utils/TestJdbcUrlUtils.java 
b/common/src/test/java/org/apache/gravitino/utils/TestJdbcUrlUtils.java
index 24acf4314c..f13f1f6316 100644
--- a/common/src/test/java/org/apache/gravitino/utils/TestJdbcUrlUtils.java
+++ b/common/src/test/java/org/apache/gravitino/utils/TestJdbcUrlUtils.java
@@ -19,7 +19,7 @@
 
 package org.apache.gravitino.utils;
 
-import java.util.Map;
+import java.util.Collections;
 import org.apache.gravitino.exceptions.GravitinoRuntimeException;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
@@ -33,7 +33,7 @@ public class TestJdbcUrlUtils {
             GravitinoRuntimeException.class,
             () ->
                 JdbcUrlUtils.validateJdbcConfig(
-                    "testDriver", "malformed%ZZurl", Map.of("test", "test")));
+                    "testDriver", "malformed%ZZurl", 
Collections.singletonMap("test", "test")));
     Assertions.assertEquals("Unable to decode JDBC URL", gre.getMessage());
   }
 
@@ -43,7 +43,9 @@ public class TestJdbcUrlUtils {
         IllegalArgumentException.class,
         () ->
             JdbcUrlUtils.validateJdbcConfig(
-                null, "jdbc:mysql://localhost:0000/test", Map.of("test", 
"test")));
+                null,
+                "jdbc:mysql://localhost:0000/test",
+                Collections.singletonMap("test", "test")));
   }
 
   @Test
@@ -51,7 +53,9 @@ public class TestJdbcUrlUtils {
     Assertions.assertDoesNotThrow(
         () ->
             JdbcUrlUtils.validateJdbcConfig(
-                "testDriver", "jdbc:mysql://localhost:0000/test", 
Map.of("test", "test")));
+                "testDriver",
+                "jdbc:mysql://localhost:0000/test",
+                Collections.singletonMap("test", "test")));
   }
 
   @Test
@@ -64,7 +68,7 @@ public class TestJdbcUrlUtils {
                 JdbcUrlUtils.validateJdbcConfig(
                     "testDriver",
                     
"jdbc:mysql://localhost:0000/test?allowloadlocalinfile=test",
-                    Map.of("test", "test")));
+                    Collections.singletonMap("test", "test")));
     Assertions.assertEquals(
         "Unsafe MySQL parameter 'allowloadlocalinfile' detected in JDBC URL", 
gre.getMessage());
   }
@@ -78,7 +82,7 @@ public class TestJdbcUrlUtils {
                 JdbcUrlUtils.validateJdbcConfig(
                     "testDriver",
                     "jdbc:mysql://localhost:0000/test",
-                    Map.of("maxAllowedPacket", "maxAllowedPacket")));
+                    Collections.singletonMap("maxAllowedPacket", 
"maxAllowedPacket")));
     Assertions.assertEquals(
         "Unsafe MySQL parameter 'maxAllowedPacket' detected in JDBC URL", 
gre.getMessage());
   }
@@ -88,7 +92,9 @@ public class TestJdbcUrlUtils {
     Assertions.assertDoesNotThrow(
         () ->
             JdbcUrlUtils.validateJdbcConfig(
-                "testDriver", "jdbc:mariadb://localhost:0000/test", 
Map.of("test", "test")));
+                "testDriver",
+                "jdbc:mariadb://localhost:0000/test",
+                Collections.singletonMap("test", "test")));
   }
 
   @Test
@@ -100,7 +106,7 @@ public class TestJdbcUrlUtils {
                 JdbcUrlUtils.validateJdbcConfig(
                     "testDriver",
                     
"jdbc:mariaDB://localhost:0000/test?allowloadlocalinfile=test",
-                    Map.of("test", "test")));
+                    Collections.singletonMap("test", "test")));
     Assertions.assertEquals(
         "Unsafe MariaDB parameter 'allowloadlocalinfile' detected in JDBC 
URL", gre.getMessage());
   }
@@ -110,7 +116,9 @@ public class TestJdbcUrlUtils {
     Assertions.assertDoesNotThrow(
         () ->
             JdbcUrlUtils.validateJdbcConfig(
-                "testDriver", "jdbc:postgresql://localhost:0000/test", 
Map.of("test", "test")));
+                "testDriver",
+                "jdbc:postgresql://localhost:0000/test",
+                Collections.singletonMap("test", "test")));
   }
 
   @Test
@@ -122,7 +130,7 @@ public class TestJdbcUrlUtils {
                 JdbcUrlUtils.validateJdbcConfig(
                     "testDriver",
                     "jdbc:postgresql://localhost:0000/test?socketFactory=test",
-                    Map.of("test", "test")));
+                    Collections.singletonMap("test", "test")));
     Assertions.assertEquals(
         "Unsafe PostgreSQL parameter 'socketFactory' detected in JDBC URL", 
gre.getMessage());
   }
@@ -133,11 +141,15 @@ public class TestJdbcUrlUtils {
         IllegalArgumentException.class,
         () ->
             JdbcUrlUtils.validateJdbcConfig(
-                null, "jdbc:postgresql://localhost:0000/test", Map.of("test", 
"test")));
+                null,
+                "jdbc:postgresql://localhost:0000/test",
+                Collections.singletonMap("test", "test")));
 
     Assertions.assertThrowsExactly(
         IllegalArgumentException.class,
-        () -> JdbcUrlUtils.validateJdbcConfig("testDriver", null, 
Map.of("test", "test")));
+        () ->
+            JdbcUrlUtils.validateJdbcConfig(
+                "testDriver", null, Collections.singletonMap("test", "test")));
 
     Assertions.assertThrowsExactly(
         IllegalArgumentException.class, () -> 
JdbcUrlUtils.validateJdbcConfig(null, null, null));
diff --git 
a/flink-connector/flink/src/main/java/org/apache/gravitino/flink/connector/catalog/BaseCatalog.java
 
b/flink-connector/flink/src/main/java/org/apache/gravitino/flink/connector/catalog/BaseCatalog.java
index cbbde24986..afa0242711 100644
--- 
a/flink-connector/flink/src/main/java/org/apache/gravitino/flink/connector/catalog/BaseCatalog.java
+++ 
b/flink-connector/flink/src/main/java/org/apache/gravitino/flink/connector/catalog/BaseCatalog.java
@@ -328,7 +328,7 @@ public abstract class BaseCatalog extends AbstractCatalog {
         primaryColumns.stream()
             .map(primaryColumn -> new String[] {primaryColumn})
             .toArray(String[][]::new);
-    Index primary = Indexes.primary("primary", primaryField, Map.of());
+    Index primary = Indexes.primary("primary", primaryField, 
Collections.emptyMap());
     return new Index[] {primary};
   }
 
diff --git 
a/maintenance/jobs/src/main/java/org/apache/gravitino/maintenance/jobs/BuiltInJobTemplateProvider.java
 
b/maintenance/jobs/src/main/java/org/apache/gravitino/maintenance/jobs/BuiltInJobTemplateProvider.java
index 09ca2199f7..39cc68fd32 100644
--- 
a/maintenance/jobs/src/main/java/org/apache/gravitino/maintenance/jobs/BuiltInJobTemplateProvider.java
+++ 
b/maintenance/jobs/src/main/java/org/apache/gravitino/maintenance/jobs/BuiltInJobTemplateProvider.java
@@ -64,7 +64,7 @@ public class BuiltInJobTemplateProvider implements 
JobTemplateProvider {
     Optional<String> version =
         Optional.ofNullable(template.customFields())
             .map(fields -> 
fields.get(JobTemplateProvider.PROPERTY_VERSION_KEY));
-    if (version.isEmpty() || 
!VERSION_PATTERN.matcher(version.get()).matches()) {
+    if (!version.isPresent() || 
!VERSION_PATTERN.matcher(version.get()).matches()) {
       LOG.warn("Skip built-in job template {} without valid version", 
template.name());
       return false;
     }
diff --git 
a/maintenance/jobs/src/test/java/org/apache/gravitino/maintenance/jobs/iceberg/TestIcebergUpdateStatsJob.java
 
b/maintenance/jobs/src/test/java/org/apache/gravitino/maintenance/jobs/iceberg/TestIcebergUpdateStatsJob.java
index 269c40cc2d..3f0080265e 100644
--- 
a/maintenance/jobs/src/test/java/org/apache/gravitino/maintenance/jobs/iceberg/TestIcebergUpdateStatsJob.java
+++ 
b/maintenance/jobs/src/test/java/org/apache/gravitino/maintenance/jobs/iceberg/TestIcebergUpdateStatsJob.java
@@ -23,6 +23,8 @@ import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertThrows;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
+import java.util.Collections;
+import java.util.HashMap;
 import java.util.Map;
 import org.apache.gravitino.job.JobTemplateProvider;
 import org.apache.gravitino.job.SparkJobTemplate;
@@ -164,11 +166,10 @@ public class TestIcebergUpdateStatsJob {
 
   @Test
   public void testBuildOptimizerProperties() {
-    Map<String, String> options =
-        Map.of(
-            "gravitino_uri", "http://localhost:8090";,
-            "metalake", "ml",
-            "gravitino.optimizer.jdbcMetrics.jdbcUrl", 
"jdbc:mysql://localhost:3306/metrics");
+    Map<String, String> options = new HashMap<>();
+    options.put("gravitino_uri", "http://localhost:8090";);
+    options.put("metalake", "ml");
+    options.put("gravitino.optimizer.jdbcMetrics.jdbcUrl", 
"jdbc:mysql://localhost:3306/metrics");
     Map<String, String> optimizerProperties =
         IcebergUpdateStatsAndMetricsJob.buildOptimizerProperties(options);
 
@@ -181,16 +182,15 @@ public class TestIcebergUpdateStatsJob {
 
   @Test
   public void testRequireGravitinoConfig() {
-    Map<String, String> optimizerProperties =
-        Map.of(
-            OptimizerConfig.GRAVITINO_URI, "http://localhost:8090";,
-            OptimizerConfig.GRAVITINO_METALAKE, "ml");
+    Map<String, String> optimizerProperties = new HashMap<>();
+    optimizerProperties.put(OptimizerConfig.GRAVITINO_URI, 
"http://localhost:8090";);
+    optimizerProperties.put(OptimizerConfig.GRAVITINO_METALAKE, "ml");
     assertEquals(
         optimizerProperties,
         
IcebergUpdateStatsAndMetricsJob.requireGravitinoConfig(optimizerProperties));
 
     assertThrows(
         IllegalArgumentException.class,
-        () -> 
IcebergUpdateStatsAndMetricsJob.requireGravitinoConfig(Map.of()));
+        () -> 
IcebergUpdateStatsAndMetricsJob.requireGravitinoConfig(Collections.emptyMap()));
   }
 }
diff --git 
a/maintenance/jobs/src/test/java/org/apache/gravitino/maintenance/jobs/iceberg/TestIcebergUpdateStatsJobWithSpark.java
 
b/maintenance/jobs/src/test/java/org/apache/gravitino/maintenance/jobs/iceberg/TestIcebergUpdateStatsJobWithSpark.java
index c5200cdc76..9a85d482d4 100644
--- 
a/maintenance/jobs/src/test/java/org/apache/gravitino/maintenance/jobs/iceberg/TestIcebergUpdateStatsJobWithSpark.java
+++ 
b/maintenance/jobs/src/test/java/org/apache/gravitino/maintenance/jobs/iceberg/TestIcebergUpdateStatsJobWithSpark.java
@@ -27,11 +27,13 @@ import java.io.File;
 import java.nio.charset.StandardCharsets;
 import java.nio.file.Files;
 import java.nio.file.Path;
+import java.nio.file.Paths;
 import java.sql.Connection;
 import java.sql.DriverManager;
 import java.time.Duration;
 import java.time.Instant;
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
@@ -200,9 +202,9 @@ public class TestIcebergUpdateStatsJobWithSpark {
             NameIdentifier.of(SPARK_CATALOG_NAME, "db", allModeTableName);
 
         PartitionPath dsPartition1 =
-            PartitionPath.of(List.of(new PartitionEntryImpl("ds", 
"2026-03-01")));
+            PartitionPath.of(Collections.singletonList(new 
PartitionEntryImpl("ds", "2026-03-01")));
         PartitionPath dsPartition2 =
-            PartitionPath.of(List.of(new PartitionEntryImpl("ds", 
"2026-03-02")));
+            PartitionPath.of(Collections.singletonList(new 
PartitionEntryImpl("ds", "2026-03-02")));
 
         try (GenericJdbcMetricsRepository repository = new 
GenericJdbcMetricsRepository()) {
           repository.initialize(buildJdbcMetricsConfigs(mysql));
@@ -385,7 +387,8 @@ public class TestIcebergUpdateStatsJobWithSpark {
         metricsUpdater.tableMetrics.stream()
             .allMatch(metric -> metric.scope() == DataScope.Type.TABLE));
     assertTrue(
-        metricsUpdater.tableMetrics.stream().allMatch(metric -> 
metric.partitionPath().isEmpty()));
+        metricsUpdater.tableMetrics.stream()
+            .allMatch(metric -> !metric.partitionPath().isPresent()));
     assertTrue(metricsUpdater.jobMetrics.isEmpty());
   }
 
@@ -412,7 +415,8 @@ public class TestIcebergUpdateStatsJobWithSpark {
         metricsUpdater.tableMetrics.stream()
             .allMatch(metric -> metric.scope() == DataScope.Type.TABLE));
     assertTrue(
-        metricsUpdater.tableMetrics.stream().allMatch(metric -> 
metric.partitionPath().isEmpty()));
+        metricsUpdater.tableMetrics.stream()
+            .allMatch(metric -> !metric.partitionPath().isPresent()));
     assertTrue(metricsUpdater.jobMetrics.isEmpty());
   }
 
@@ -450,7 +454,7 @@ public class TestIcebergUpdateStatsJobWithSpark {
         long now = Instant.now().getEpochSecond();
 
         PartitionPath partitionPath =
-            PartitionPath.of(List.of(new PartitionEntryImpl("ds", 
"2026-01-01")));
+            PartitionPath.of(Collections.singletonList(new 
PartitionEntryImpl("ds", "2026-01-01")));
         List<MetricPoint> partitionMetrics =
             repository.getMetrics(
                 DataScope.forPartition(identifier, partitionPath), now - 300, 
now + 300);
@@ -467,7 +471,7 @@ public class TestIcebergUpdateStatsJobWithSpark {
             .resolve("scripts")
             .resolve("mysql")
             .resolve("schema-" + ConfigConstants.CURRENT_SCRIPT_VERSION + 
"-mysql.sql");
-    String schemaSql = Files.readString(schemaPath, StandardCharsets.UTF_8);
+    String schemaSql = new String(Files.readAllBytes(schemaPath), 
StandardCharsets.UTF_8);
     try (Connection connection =
         DriverManager.getConnection(mysql.getJdbcUrl(), mysql.getUsername(), 
mysql.getPassword())) {
       JdbcSqlScriptUtils.executeSqlScript(connection, schemaSql);
@@ -475,7 +479,7 @@ public class TestIcebergUpdateStatsJobWithSpark {
   }
 
   private static Path findRepoRoot() {
-    Path current = Path.of("").toAbsolutePath();
+    Path current = Paths.get("").toAbsolutePath();
     while (current != null) {
       if (Files.exists(current.resolve("gradlew"))) {
         return current;
@@ -517,11 +521,12 @@ public class TestIcebergUpdateStatsJobWithSpark {
             .collect(Collectors.toSet());
 
     assertEquals(
-        Set.of(
-            "event_ts_day=2026-01-01,region=ap-south",
-            "event_ts_day=2026-01-01,region=us-east",
-            "event_ts_day=2026-01-02,region=ap-south",
-            "event_ts_day=2026-01-02,region=us-east"),
+        new HashSet<>(
+            Arrays.asList(
+                "event_ts_day=2026-01-01,region=ap-south",
+                "event_ts_day=2026-01-01,region=us-east",
+                "event_ts_day=2026-01-02,region=ap-south",
+                "event_ts_day=2026-01-02,region=us-east")),
         parsedPartitions);
   }
 
@@ -578,7 +583,7 @@ public class TestIcebergUpdateStatsJobWithSpark {
     List<MetricPoint> metrics = getTableMetrics(repository, tableIdentifier);
     assertEquals(EXPECTED_METRIC_COUNT_PER_SCOPE, metrics.size());
     assertTrue(metrics.stream().allMatch(metric -> metric.scope() == 
DataScope.Type.TABLE));
-    assertTrue(metrics.stream().allMatch(metric -> 
metric.partitionPath().isEmpty()));
+    assertTrue(metrics.stream().allMatch(metric -> 
!metric.partitionPath().isPresent()));
     assertEquals(
         EXPECTED_METRIC_NAMES,
         
metrics.stream().map(MetricPoint::metricName).collect(Collectors.toSet()));
@@ -801,7 +806,7 @@ public class TestIcebergUpdateStatsJobWithSpark {
     try {
       return client.loadMetalake(metalakeName);
     } catch (NoSuchMetalakeException ignored) {
-      return client.createMetalake(metalakeName, "IT metalake", Map.of());
+      return client.createMetalake(metalakeName, "IT metalake", 
Collections.emptyMap());
     }
   }
 
@@ -826,8 +831,9 @@ public class TestIcebergUpdateStatsJobWithSpark {
 
   private static final class RecordingStatisticsUpdater implements 
StatisticsUpdater {
     private NameIdentifier tableIdentifier;
-    private List<StatisticEntry<?>> tableStatistics = List.of();
-    private Map<PartitionPath, List<StatisticEntry<?>>> partitionStatistics = 
Map.of();
+    private List<StatisticEntry<?>> tableStatistics = Collections.emptyList();
+    private Map<PartitionPath, List<StatisticEntry<?>>> partitionStatistics =
+        Collections.emptyMap();
 
     @Override
     public String name() {
@@ -857,8 +863,8 @@ public class TestIcebergUpdateStatsJobWithSpark {
   }
 
   private static final class RecordingMetricsUpdater implements MetricsUpdater 
{
-    private List<MetricPoint> tableMetrics = List.of();
-    private List<MetricPoint> jobMetrics = List.of();
+    private List<MetricPoint> tableMetrics = Collections.emptyList();
+    private List<MetricPoint> jobMetrics = Collections.emptyList();
 
     @Override
     public String name() {
diff --git 
a/maintenance/optimizer-api/src/test/java/org/apache/gravitino/maintenance/optimizer/common/util/TestPartitionPathSerdeUtils.java
 
b/maintenance/optimizer-api/src/test/java/org/apache/gravitino/maintenance/optimizer/common/util/TestPartitionPathSerdeUtils.java
index da7749b8c8..53b25102dc 100644
--- 
a/maintenance/optimizer-api/src/test/java/org/apache/gravitino/maintenance/optimizer/common/util/TestPartitionPathSerdeUtils.java
+++ 
b/maintenance/optimizer-api/src/test/java/org/apache/gravitino/maintenance/optimizer/common/util/TestPartitionPathSerdeUtils.java
@@ -22,7 +22,7 @@ package 
org.apache.gravitino.maintenance.optimizer.common.util;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertThrows;
 
-import java.util.List;
+import java.util.Arrays;
 import org.apache.gravitino.maintenance.optimizer.api.common.PartitionPath;
 import org.apache.gravitino.maintenance.optimizer.common.PartitionEntryImpl;
 import org.junit.jupiter.api.Test;
@@ -33,7 +33,7 @@ public class TestPartitionPathSerdeUtils {
   public void testEncodeAndDecodePartitionPath() {
     PartitionPath path =
         PartitionPath.of(
-            List.of(
+            Arrays.asList(
                 new PartitionEntryImpl("dt", "2026-01-01"), new 
PartitionEntryImpl("hh", "08")));
 
     String encoded = PartitionPathSerdeUtils.encode(path);

Reply via email to