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

tison pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/opendal.git


The following commit(s) were added to refs/heads/main by this push:
     new 9b154a0ba chore: binding java's dependency (#7198)
9b154a0ba is described below

commit 9b154a0baf85cb390e7a27d1b718fb19b070de87
Author: tison <[email protected]>
AuthorDate: Sun Feb 22 21:17:24 2026 +0800

    chore: binding java's dependency (#7198)
    
    Signed-off-by: tison <[email protected]>
---
 .github/actions/setup-hadoop/action.yaml           |  6 +-
 .../actions/test_behavior_binding_java/action.yaml |  2 +-
 .github/scripts/test_behavior/plan.py              | 12 ++-
 .github/services/hdfs/hdfs_default_gcs/action.yml  |  4 +-
 .../hdfs/hdfs_default_on_azurite_azblob/action.yml |  4 +-
 .../hdfs/hdfs_default_on_minio_s3/action.yml       |  4 +-
 .github/workflows/ci_bindings_java.yml             | 34 ++++++--
 .github/workflows/ci_core.yml                      | 24 +++---
 .github/workflows/ci_integration_spring.yml        |  4 +-
 .github/workflows/docs.yml                         | 10 +--
 .github/workflows/release_java.yml                 |  5 +-
 .github/workflows/release_rust.yml                 |  4 +-
 bindings/java/Cargo.toml                           | 94 ++++------------------
 bindings/java/README.md                            | 10 ---
 bindings/java/pom.xml                              | 33 ++++----
 bindings/java/src/executor.rs                      |  8 +-
 bindings/java/src/utility.rs                       | 75 +----------------
 bindings/java/tools/build.py                       |  4 -
 integrations/spring/pom.xml                        | 33 ++++++--
 19 files changed, 137 insertions(+), 233 deletions(-)

diff --git a/.github/actions/setup-hadoop/action.yaml 
b/.github/actions/setup-hadoop/action.yaml
index 835371e42..476bbb071 100644
--- a/.github/actions/setup-hadoop/action.yaml
+++ b/.github/actions/setup-hadoop/action.yaml
@@ -28,8 +28,8 @@ runs:
     - name: Setup java env
       uses: actions/setup-java@v4
       with:
-        distribution: temurin
-        java-version: "11"
+        distribution: zulu
+        java-version: 11
 
     - name: Cache hadoop
       id: cache-hadoop
@@ -51,7 +51,7 @@ runs:
       run: |
         export HADOOP_HOME=/home/runner/hadoop-3.3.5
         echo "HADOOP_HOME=${HADOOP_HOME}" >> $GITHUB_ENV
-        echo "CLASSPATH=$(${HADOOP_HOME}/bin/hadoop classpath --glob)" >> 
$GITHUB_ENV 
+        echo "CLASSPATH=$(${HADOOP_HOME}/bin/hadoop classpath --glob)" >> 
$GITHUB_ENV
         echo "LD_LIBRARY_PATH=${{ env.JAVA_HOME 
}}/lib/server:${HADOOP_HOME}/lib/native" >> $GITHUB_ENV
         cp ${{ github.workspace }}/fixtures/hdfs/hdfs-site.xml 
${HADOOP_HOME}/etc/hadoop/hdfs-site.xml
 
diff --git a/.github/actions/test_behavior_binding_java/action.yaml 
b/.github/actions/test_behavior_binding_java/action.yaml
index d9252b1c3..8adbb3142 100644
--- a/.github/actions/test_behavior_binding_java/action.yaml
+++ b/.github/actions/test_behavior_binding_java/action.yaml
@@ -41,7 +41,7 @@ runs:
           - name: Run Test Binding Java
             shell: bash
             working-directory: bindings/java
-            run: ./mvnw test -Dtest="behavior.*Test"  
-Dcargo-build.features=${{ inputs.feature }}
+            run: ./mvnw test -Dtest="behavior.*Test"
             env:
               OPENDAL_TEST: ${{ inputs.service }}
         EOF
diff --git a/.github/scripts/test_behavior/plan.py 
b/.github/scripts/test_behavior/plan.py
index 162ea2f85..65651553e 100755
--- a/.github/scripts/test_behavior/plan.py
+++ b/.github/scripts/test_behavior/plan.py
@@ -175,7 +175,7 @@ def calculate_hint(changed_files: list[str]) -> Hint:
             hint.binding_go = True
             hint.all_service = True
 
-        # cpp affected  
+        # cpp affected
         if p.startswith("bindings/cpp/"):
             hint.binding_cpp = True
             hint.all_service = True
@@ -267,9 +267,15 @@ def generate_language_binding_cases(
     # Bindings may be treated as parallel requests, so we need to disable it 
for all languages.
     cases = [v for v in cases if v["service"] != "aliyun_drive"]
 
-    # Remove hdfs cases for java and go.
+    # Remove invalid cases for java.
     if language == "java":
-        cases = [v for v in cases if v["service"] != "hdfs"]
+        cases = [v for v in cases if v["service"] not in [
+            "compfs",
+            "hdfs",
+            "hdfs_native",
+            "monoiofs",
+            "rocksdb",
+        ]]
 
     if os.getenv("GITHUB_IS_PUSH") == "true":
         return cases
diff --git a/.github/services/hdfs/hdfs_default_gcs/action.yml 
b/.github/services/hdfs/hdfs_default_gcs/action.yml
index 578220972..b264e8e70 100644
--- a/.github/services/hdfs/hdfs_default_gcs/action.yml
+++ b/.github/services/hdfs/hdfs_default_gcs/action.yml
@@ -24,8 +24,8 @@ runs:
     - name: Setup java env
       uses: actions/setup-java@v4
       with:
-        distribution: temurin
-        java-version: "11"
+        distribution: zulu
+        java-version: 11
     - name: Load secrets
       uses: 
1password/load-secrets-action@13f58eec611f8e5db52ec16247f58c508398f3e6 # v3
       with:
diff --git a/.github/services/hdfs/hdfs_default_on_azurite_azblob/action.yml 
b/.github/services/hdfs/hdfs_default_on_azurite_azblob/action.yml
index 94a2763af..11ac22c2e 100644
--- a/.github/services/hdfs/hdfs_default_on_azurite_azblob/action.yml
+++ b/.github/services/hdfs/hdfs_default_on_azurite_azblob/action.yml
@@ -24,8 +24,8 @@ runs:
     - name: Setup java env
       uses: actions/setup-java@v4
       with:
-        distribution: temurin
-        java-version: "11"
+        distribution: zulu
+        java-version: 11
     - name: Setup azurite azblob service
       shell: bash
       working-directory: fixtures/azblob
diff --git a/.github/services/hdfs/hdfs_default_on_minio_s3/action.yml 
b/.github/services/hdfs/hdfs_default_on_minio_s3/action.yml
index e75b8e415..cd8128aa9 100644
--- a/.github/services/hdfs/hdfs_default_on_minio_s3/action.yml
+++ b/.github/services/hdfs/hdfs_default_on_minio_s3/action.yml
@@ -24,8 +24,8 @@ runs:
     - name: Setup java env
       uses: actions/setup-java@v4
       with:
-        distribution: temurin
-        java-version: "11"
+        distribution: zulu
+        java-version: 11
     - name: Setup MinIO Server
       shell: bash
       working-directory: fixtures/s3
diff --git a/.github/workflows/ci_bindings_java.yml 
b/.github/workflows/ci_bindings_java.yml
index 682fd892e..1003b8ace 100644
--- a/.github/workflows/ci_bindings_java.yml
+++ b/.github/workflows/ci_bindings_java.yml
@@ -46,17 +46,23 @@ jobs:
     runs-on: ubuntu-latest
     steps:
       - uses: actions/checkout@v6
-      - name: Set up JDK 21
+      - name: Set up Rust toolchain
+        uses: ./.github/actions/setup
+        with:
+          need-nextest: true
+          need-protoc: true
+          need-rocksdb: true
+          github-token: ${{ secrets.GITHUB_TOKEN }}
+      - name: Set up JDK 25
         uses: actions/setup-java@v5
         with:
-          distribution: 'zulu'
-          java-version: '21'
+          distribution: zulu
+          java-version: 25
           cache: 'maven'
       - name: Build and check
         working-directory: bindings/java
         run: |
           ./mvnw clean compile spotless:check
-
       - name: Check Clippy
         working-directory: bindings/java
         run: cargo clippy -- -D warnings
@@ -64,19 +70,33 @@ jobs:
   test:
     runs-on: ${{ matrix.os }}
     strategy:
+      fail-fast: false
       matrix:
         os:
           - ubuntu-latest
           - ubuntu-24.04-arm
           - macos-latest
           - windows-latest
+        java-version:
+          - 8
+          - 11
+          - 17
+          - 21
+          - 25
     steps:
       - uses: actions/checkout@v6
-      - name: Set up JDK 8
+      - name: Set up Rust toolchain
+        uses: ./.github/actions/setup
+        with:
+          need-nextest: true
+          need-protoc: true
+          need-rocksdb: true
+          github-token: ${{ secrets.GITHUB_TOKEN }}
+      - name: Set up JDK ${{ matrix.java-version }}
         uses: actions/setup-java@v5
         with:
-          distribution: 'zulu'
-          java-version: '8'
+          distribution: zulu
+          java-version: ${{ matrix.java-version }}
           cache: 'maven'
       - name: Build and test
         working-directory: bindings/java
diff --git a/.github/workflows/ci_core.yml b/.github/workflows/ci_core.yml
index 264661077..cca7020a4 100644
--- a/.github/workflows/ci_core.yml
+++ b/.github/workflows/ci_core.yml
@@ -48,8 +48,8 @@ jobs:
       - name: Checkout java env
         uses: actions/setup-java@v5
         with:
-          distribution: temurin
-          java-version: "11"
+          distribution: zulu
+          java-version: 25
 
       - name: Cargo doc
         working-directory: core
@@ -70,8 +70,8 @@ jobs:
       - name: Checkout java env
         uses: actions/setup-java@v5
         with:
-          distribution: temurin
-          java-version: "11"
+          distribution: zulu
+          java-version: 25
 
       - name: Cargo clippy
         working-directory: core
@@ -126,8 +126,8 @@ jobs:
       - name: Checkout java env
         uses: actions/setup-java@v5
         with:
-          distribution: temurin
-          java-version: "11"
+          distribution: zulu
+          java-version: 25
 
       - name: Setup Rust toolchain
         uses: ./.github/actions/setup
@@ -157,8 +157,8 @@ jobs:
       - name: Checkout java env
         uses: actions/setup-java@v5
         with:
-          distribution: temurin
-          java-version: "11"
+          distribution: zulu
+          java-version: 25
 
       - name: Setup Rust toolchain
         uses: ./.github/actions/setup
@@ -266,8 +266,8 @@ jobs:
       - name: Checkout java env
         uses: actions/setup-java@v5
         with:
-          distribution: temurin
-          java-version: "11"
+          distribution: zulu
+          java-version: 25
 
       - name: Setup Rust toolchain
         uses: ./.github/actions/setup
@@ -311,8 +311,8 @@ jobs:
       - name: Checkout java env
         uses: actions/setup-java@v5
         with:
-          distribution: temurin
-          java-version: "11"
+          distribution: zulu
+          java-version: 25
 
       - name: Setup Rust toolchain
         uses: ./.github/actions/setup
diff --git a/.github/workflows/ci_integration_spring.yml 
b/.github/workflows/ci_integration_spring.yml
index f848dbef7..de9237027 100644
--- a/.github/workflows/ci_integration_spring.yml
+++ b/.github/workflows/ci_integration_spring.yml
@@ -45,8 +45,8 @@ jobs:
       - name: Set up Java
         uses: actions/setup-java@v5
         with:
-          java-version: '17'
-          distribution: 'temurin'
+          java-version: 25
+          distribution: zulu
 
       - name: package and test
         working-directory: integrations/spring
diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml
index fb03aa5d4..94b7868f8 100644
--- a/.github/workflows/docs.yml
+++ b/.github/workflows/docs.yml
@@ -65,8 +65,8 @@ jobs:
 
       - uses: actions/setup-java@v5
         with:
-          distribution: temurin
-          java-version: "17"
+          distribution: zulu
+          java-version: 25
 
       - name: Build OpenDAL doc
         working-directory: core
@@ -88,12 +88,12 @@ jobs:
 
       - uses: actions/setup-java@v5
         with:
-          distribution: temurin
-          java-version: "17"
+          distribution: zulu
+          java-version: 25
 
       - name: Build and test
         working-directory: bindings/java
-        run: mvn javadoc:javadoc
+        run: ./mvnw javadoc:javadoc
 
       - name: Upload docs
         uses: actions/upload-artifact@v6
diff --git a/.github/workflows/release_java.yml 
b/.github/workflows/release_java.yml
index 7f1749330..c4a9daef1 100644
--- a/.github/workflows/release_java.yml
+++ b/.github/workflows/release_java.yml
@@ -55,7 +55,7 @@ jobs:
       - name: Set up JDK 8
         uses: actions/setup-java@v5
         with:
-          distribution: "zulu"
+          distribution: zulu
           java-version: "8"
           cache: "maven"
           server-id: apache.releases.https
@@ -84,7 +84,6 @@ jobs:
             -DskipTests=true \
             -Djni.classifier=${{ matrix.classifier }} \
             -Dcargo-build.profile=release \
-            -Dcargo-build.features=services-all \
             -Dcargo-build.enableZigbuild=${{ env.CARGO_BUILD_ENABLE_ZIGBUILD 
}} \
             -DaltStagingDirectory=local-staging \
             -DskipRemoteStaging=true \
@@ -113,7 +112,7 @@ jobs:
       - name: Set up JDK 8
         uses: actions/setup-java@v5
         with:
-          distribution: "zulu"
+          distribution: zulu
           java-version: "8"
           cache: "maven"
           server-id: apache.releases.https
diff --git a/.github/workflows/release_rust.yml 
b/.github/workflows/release_rust.yml
index 28ac09ed2..fefab0605 100644
--- a/.github/workflows/release_rust.yml
+++ b/.github/workflows/release_rust.yml
@@ -56,8 +56,8 @@ jobs:
       - name: Checkout java env
         uses: actions/setup-java@v5
         with:
-          distribution: temurin
-          java-version: "11"
+          distribution: zulu
+          java-version: 25
 
       - name: Setup Rust toolchain
         uses: ./.github/actions/setup
diff --git a/bindings/java/Cargo.toml b/bindings/java/Cargo.toml
index 64b0fb877..684ba2251 100644
--- a/bindings/java/Cargo.toml
+++ b/bindings/java/Cargo.toml
@@ -30,8 +30,21 @@ rust-version = "1.85"
 crate-type = ["cdylib"]
 doc = false
 
-[features]
-default = [
+[dependencies]
+jni = { version = "0.21.1" }
+# opendal-java won't be published to crates.io, we always use the local version
+opendal = { version = ">=0", path = "../../core", default-features = false, 
features = [
+  "blocking",
+  "reqwest-rustls-tls",
+  "executors-tokio",
+
+  # enabled layers
+  "layers-concurrent-limit",
+  "layers-logging",
+  "layers-retry",
+  "layers-timeout",
+
+  # enabled services
   "services-azblob",
   "services-azdls",
   "services-cos",
@@ -46,10 +59,6 @@ default = [
   "services-s3",
   "services-webdav",
   "services-webhdfs",
-]
-
-services-all = [
-  "default",
   "services-aliyun-drive",
   "services-cacache",
   "services-dashmap",
@@ -90,77 +99,8 @@ services-all = [
   "services-seafile",
   "services-upyun",
   "services-yandex-disk",
-]
-
-# Optional services provided by opendal.
-services-aliyun-drive = ["opendal/services-aliyun-drive"]
-services-alluxio = ["opendal/services-alluxio"]
-services-azblob = ["opendal/services-azblob"]
-services-azdls = ["opendal/services-azdls"]
-services-azfile = ["opendal/services-azfile"]
-services-b2 = ["opendal/services-b2"]
-services-cacache = ["opendal/services-cacache"]
-services-cloudflare-kv = ["opendal/services-cloudflare-kv"]
-services-compfs = ["opendal/services-compfs"]
-services-cos = ["opendal/services-cos"]
-services-dashmap = ["opendal/services-dashmap"]
-services-dbfs = ["opendal/services-dbfs"]
-services-dropbox = ["opendal/services-dropbox"]
-services-etcd = ["opendal/services-etcd"]
-services-foundationdb = ["opendal/services-foundationdb"]
-services-fs = ["opendal/services-fs"]
-services-ftp = ["opendal/services-ftp"]
-services-gcs = ["opendal/services-gcs"]
-services-gdrive = ["opendal/services-gdrive"]
-services-ghac = ["opendal/services-ghac"]
-services-github = ["opendal/services-github"]
-services-gridfs = ["opendal/services-gridfs"]
-services-hdfs = ["opendal/services-hdfs"]
-services-hdfs-native = ["opendal/services-hdfs-native"]
-services-hf = ["opendal/services-hf"]
-services-http = ["opendal/services-http"]
-services-huggingface = ["services-hf"]
-services-ipfs = ["opendal/services-ipfs"]
-services-ipmfs = ["opendal/services-ipmfs"]
-services-koofr = ["opendal/services-koofr"]
-services-lakefs = ["opendal/services-lakefs"]
-services-memcached = ["opendal/services-memcached"]
-services-memory = ["opendal/services-memory"]
-services-mini-moka = ["opendal/services-mini-moka"]
-services-moka = ["opendal/services-moka"]
-services-mongodb = ["opendal/services-mongodb"]
-services-monoiofs = ["opendal/services-monoiofs"]
-services-mysql = ["opendal/services-mysql"]
-services-obs = ["opendal/services-obs"]
-services-onedrive = ["opendal/services-onedrive"]
-services-oss = ["opendal/services-oss"]
-services-pcloud = ["opendal/services-pcloud"]
-services-persy = ["opendal/services-persy"]
-services-postgresql = ["opendal/services-postgresql"]
-services-redb = ["opendal/services-redb"]
-services-redis = ["opendal/services-redis"]
-services-rocksdb = ["opendal/services-rocksdb"]
-services-s3 = ["opendal/services-s3"]
-services-seafile = ["opendal/services-seafile"]
-services-sftp = ["opendal/services-sftp"]
-services-sled = ["opendal/services-sled"]
-services-sqlite = ["opendal/services-sqlite"]
-services-surrealdb = ["opendal/services-surrealdb"]
-services-swift = ["opendal/services-swift"]
-services-tikv = ["opendal/services-tikv"]
-services-upyun = ["opendal/services-upyun"]
-services-vercel-artifacts = ["opendal/services-vercel-artifacts"]
-services-vercel-blob = ["opendal/services-vercel-blob"]
-services-webdav = ["opendal/services-webdav"]
-services-webhdfs = ["opendal/services-webhdfs"]
-services-yandex-disk = ["opendal/services-yandex-disk"]
-
-[dependencies]
-anyhow = { version = "1.0.100" }
-jni = { version = "0.21.1" }
-# this crate won't be published, we always use the local version
-opendal = { version = ">=0", path = "../../core", features = ["blocking"] }
-tokio = { version = "1.28.1", features = ["full"] }
+] }
+tokio = { version = "1.49.0", features = ["full"] }
 
 # This is not optimal. See also the Cargo issue:
 # https://github.com/rust-lang/cargo/issues/1197#issuecomment-1641086954
diff --git a/bindings/java/README.md b/bindings/java/README.md
index 71a249942..24e892de2 100644
--- a/bindings/java/README.md
+++ b/bindings/java/README.md
@@ -155,16 +155,6 @@ You can run service behavior tests of enabled with the 
following command:
 ./mvnw test -Dtest="behavior.*Test"
 ```
 
-Remember to enable the necessary features via 
`-Dcargo-build.features=services-xxx` when running specific service test:
-
-```shell
-export OPENDAL_TEST=redis
-export OPENDAL_REDIS_ENDPOINT=tcp://127.0.0.1:6379
-export OPENDAL_REDIS_ROOT=/
-export OPENDAL_REDIS_DB=0
-./mvnw test -Dtest="behavior.*Test" -Dcargo-build.features=services-redis
-```
-
 ## Used by
 
 Check out the [users](./users.md) list for more details on who is using 
OpenDAL.
diff --git a/bindings/java/pom.xml b/bindings/java/pom.xml
index cb8b71be7..575d470fe 100644
--- a/bindings/java/pom.xml
+++ b/bindings/java/pom.xml
@@ -53,33 +53,34 @@
 
     <properties>
         <!-- This value is for Reproducible Builds. It will be updated by 
Maven Release Plugin during releases. -->
-        <project.build.outputTimestamp>10</project.build.outputTimestamp>
+        
<project.build.outputTimestamp>2026-01-01T00:00:00Z</project.build.outputTimestamp>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
         <maven.compiler.source>1.8</maven.compiler.source>
         <maven.compiler.target>1.8</maven.compiler.target>
 
         <!-- customized properties -->
         <cargo-build.profile>dev</cargo-build.profile>
-        <cargo-build.features>default</cargo-build.features>
         <cargo-build.enableZigbuild>false</cargo-build.enableZigbuild>
         <cargo-build.target/> <!-- override cargo build target; e.g., use musl 
instead -->
         <jni.classifier>${os.detected.classifier}</jni.classifier>
 
         <!-- library dependencies -->
-        <assertj.version>3.23.1</assertj.version>
-        <commons-io.version>2.16.1</commons-io.version>
+        <assertj.version>3.27.7</assertj.version>
+        <commons-io.version>2.21.0</commons-io.version>
         <dotenv.version>2.3.2</dotenv.version>
-        <lombok.version>1.18.34</lombok.version>
-        <slf4j.version>2.0.7</slf4j.version>
-        <httpclient.version>5.2</httpclient.version>
+        <httpclient.version>5.6</httpclient.version>
+        <junit.version>5.10.0</junit.version>
+        <lombok.version>1.18.42</lombok.version>
+        <slf4j.version>2.0.17</slf4j.version>
 
         <!-- plugins dependencies -->
-        <maven-surefire-plugin.version>3.1.2</maven-surefire-plugin.version>
-        <maven-compiler-plugin.version>3.13.0</maven-compiler-plugin.version>
-        <exec-maven-plugin.version>3.1.0</exec-maven-plugin.version>
-        <os-maven-plugin.version>1.7.0</os-maven-plugin.version>
-        <palantir-java-format.version>2.36.0</palantir-java-format.version>
-        <spotless.version>2.39.0</spotless.version>
+        <maven-surefire-plugin.version>3.5.5</maven-surefire-plugin.version>
+        <maven-compiler-plugin.version>3.15.0</maven-compiler-plugin.version>
+        <exec-maven-plugin.version>3.6.3</exec-maven-plugin.version>
+        <os-maven-plugin.version>1.7.1</os-maven-plugin.version>
+        <palantir-java-format.version>2.81.0</palantir-java-format.version>
+        <spotless.version>3.2.0</spotless.version>
         <maven-javadoc-plugin.version>3.6.3</maven-javadoc-plugin.version>
     </properties>
 
@@ -88,7 +89,7 @@
             <dependency>
                 <groupId>org.junit</groupId>
                 <artifactId>junit-bom</artifactId>
-                <version>5.9.2</version>
+                <version>${junit.version}</version>
                 <type>pom</type>
                 <scope>import</scope>
             </dependency>
@@ -215,8 +216,6 @@
                                 <argument>${cargo-build.target}</argument>
                                 <argument>--profile</argument>
                                 <argument>${cargo-build.profile}</argument>
-                                <argument>--features</argument>
-                                <argument>${cargo-build.features}</argument>
                                 <argument>--enable-zigbuild</argument>
                                 
<argument>${cargo-build.enableZigbuild}</argument>
                             </arguments>
@@ -298,7 +297,7 @@
                 <version>${maven-javadoc-plugin.version}</version>
                 <configuration>
                     <bottom>
-                        Copyright © 2022-2024, The Apache Software Foundation. 
Apache OpenDAL, OpenDAL, and Apache
+                        Copyright © 2022-2026, The Apache Software Foundation. 
Apache OpenDAL, OpenDAL, and Apache
                         are either registered trademarks or trademarks of the 
Apache Software Foundation.
                     </bottom>
                 </configuration>
diff --git a/bindings/java/src/executor.rs b/bindings/java/src/executor.rs
index caa8263ae..e6e305609 100644
--- a/bindings/java/src/executor.rs
+++ b/bindings/java/src/executor.rs
@@ -28,7 +28,7 @@ use jni::JavaVM;
 use jni::objects::JClass;
 use jni::objects::JObject;
 use jni::objects::JValue;
-use jni::sys::jlong;
+use jni::sys::{jint, jlong};
 use tokio::task::JoinHandle;
 
 use crate::Result;
@@ -38,6 +38,12 @@ thread_local! {
     static ENV: RefCell<Option<*mut jni::sys::JNIEnv>> = const { 
RefCell::new(None) };
 }
 
+#[unsafe(no_mangle)]
+pub unsafe extern "system" fn JNI_OnLoad(_: JavaVM, _: *mut c_void) -> jint {
+    opendal::init_default_registry();
+    jni::sys::JNI_VERSION_1_8
+}
+
 /// # Safety
 ///
 /// This function could be only called by java vm when unload this lib.
diff --git a/bindings/java/src/utility.rs b/bindings/java/src/utility.rs
index c61a876ab..7ca9e617f 100644
--- a/bindings/java/src/utility.rs
+++ b/bindings/java/src/utility.rs
@@ -42,125 +42,52 @@ pub unsafe extern "system" fn 
Java_org_apache_opendal_OpenDAL_loadEnabledService
 
 fn intern_load_enabled_services(env: &mut JNIEnv) -> Result<jobjectArray> {
     let services = HashSet::from([
-        #[cfg(feature = "services-aliyun-drive")]
         opendal::services::ALIYUN_DRIVE_SCHEME,
-        #[cfg(feature = "services-alluxio")]
         opendal::services::ALLUXIO_SCHEME,
-        #[cfg(feature = "services-azblob")]
         opendal::services::AZBLOB_SCHEME,
-        #[cfg(feature = "services-azdls")]
         opendal::services::AZDLS_SCHEME,
-        #[cfg(feature = "services-azfile")]
         opendal::services::AZFILE_SCHEME,
-        #[cfg(feature = "services-b2")]
         opendal::services::B2_SCHEME,
-        #[cfg(feature = "services-cacache")]
         opendal::services::CACACHE_SCHEME,
-        #[cfg(feature = "services-cloudflare-kv")]
-        opendal::services::CLOUDFLARE_KV_SCHEME,
-        #[cfg(feature = "services-compfs")]
-        opendal::services::COMPFS_SCHEME,
-        #[cfg(feature = "services-cos")]
         opendal::services::COS_SCHEME,
-        #[cfg(feature = "services-dashmap")]
         opendal::services::DASHMAP_SCHEME,
-        #[cfg(feature = "services-dbfs")]
-        opendal::services::DBFS_SCHEME,
-        #[cfg(feature = "services-dropbox")]
         opendal::services::DROPBOX_SCHEME,
-        #[cfg(feature = "services-etcd")]
         opendal::services::ETCD_SCHEME,
-        #[cfg(feature = "services-foundationdb")]
-        opendal::services::FOUNDATIONDB_SCHEME,
-        #[cfg(feature = "services-fs")]
         opendal::services::FS_SCHEME,
-        #[cfg(feature = "services-ftp")]
-        opendal::services::FTP_SCHEME,
-        #[cfg(feature = "services-gcs")]
         opendal::services::GCS_SCHEME,
-        #[cfg(feature = "services-gdrive")]
         opendal::services::GDRIVE_SCHEME,
-        #[cfg(feature = "services-ghac")]
         opendal::services::GHAC_SCHEME,
-        #[cfg(feature = "services-github")]
-        opendal::services::GITHUB_SCHEME,
-        #[cfg(feature = "services-gridfs")]
         opendal::services::GRIDFS_SCHEME,
-        #[cfg(feature = "services-hdfs")]
-        opendal::services::HDFS_SCHEME,
-        #[cfg(feature = "services-hdfs-native")]
-        opendal::services::HDFS_NATIVE_SCHEME,
-        #[cfg(feature = "services-http")]
         opendal::services::HTTP_SCHEME,
-        #[cfg(feature = "services-hf")]
         opendal::services::HF_SCHEME,
-        #[cfg(feature = "services-ipfs")]
         opendal::services::IPFS_SCHEME,
-        #[cfg(feature = "services-ipmfs")]
         opendal::services::IPMFS_SCHEME,
-        #[cfg(feature = "services-koofr")]
         opendal::services::KOOFR_SCHEME,
-        #[cfg(feature = "services-lakefs")]
-        opendal::services::LAKEFS_SCHEME,
-        #[cfg(feature = "services-memcached")]
         opendal::services::MEMCACHED_SCHEME,
-        #[cfg(feature = "services-memory")]
         opendal::services::MEMORY_SCHEME,
-        #[cfg(feature = "services-mini-moka")]
         opendal::services::MINI_MOKA_SCHEME,
-        #[cfg(feature = "services-moka")]
         opendal::services::MOKA_SCHEME,
-        #[cfg(feature = "services-mongodb")]
         opendal::services::MONGODB_SCHEME,
-        #[cfg(feature = "services-monoiofs")]
-        opendal::services::MONOIOFS_SCHEME,
-        #[cfg(feature = "services-mysql")]
         opendal::services::MYSQL_SCHEME,
-        #[cfg(feature = "services-obs")]
         opendal::services::OBS_SCHEME,
-        #[cfg(feature = "services-onedrive")]
         opendal::services::ONEDRIVE_SCHEME,
-        #[cfg(feature = "services-oss")]
         opendal::services::OSS_SCHEME,
-        #[cfg(feature = "services-pcloud")]
-        opendal::services::PCLOUD_SCHEME,
-        #[cfg(feature = "services-persy")]
         opendal::services::PERSY_SCHEME,
-        #[cfg(feature = "services-postgresql")]
         opendal::services::POSTGRESQL_SCHEME,
-        #[cfg(feature = "services-redb")]
         opendal::services::REDB_SCHEME,
-        #[cfg(feature = "services-redis")]
         opendal::services::REDIS_SCHEME,
-        #[cfg(feature = "services-rocksdb")]
-        opendal::services::ROCKSDB_SCHEME,
-        #[cfg(feature = "services-s3")]
         opendal::services::S3_SCHEME,
-        #[cfg(feature = "services-seafile")]
         opendal::services::SEAFILE_SCHEME,
-        #[cfg(feature = "services-sftp")]
+        #[cfg(unix)]
         opendal::services::SFTP_SCHEME,
-        #[cfg(feature = "services-sled")]
         opendal::services::SLED_SCHEME,
-        #[cfg(feature = "services-sqlite")]
         opendal::services::SQLITE_SCHEME,
-        #[cfg(feature = "services-surrealdb")]
-        opendal::services::SURREALDB_SCHEME,
-        #[cfg(feature = "services-swift")]
         opendal::services::SWIFT_SCHEME,
-        #[cfg(feature = "services-tikv")]
         opendal::services::TIKV_SCHEME,
-        #[cfg(feature = "services-upyun")]
         opendal::services::UPYUN_SCHEME,
-        #[cfg(feature = "services-vercel-artifacts")]
         opendal::services::VERCEL_ARTIFACTS_SCHEME,
-        #[cfg(feature = "services-vercel-blob")]
-        opendal::services::VERCEL_BLOB_SCHEME,
-        #[cfg(feature = "services-webdav")]
         opendal::services::WEBDAV_SCHEME,
-        #[cfg(feature = "services-webhdfs")]
         opendal::services::WEBHDFS_SCHEME,
-        #[cfg(feature = "services-yandex-disk")]
         opendal::services::YANDEX_DISK_SCHEME,
     ]);
 
diff --git a/bindings/java/tools/build.py b/bindings/java/tools/build.py
index 0eedaa65e..aa626e88c 100755
--- a/bindings/java/tools/build.py
+++ b/bindings/java/tools/build.py
@@ -54,7 +54,6 @@ if __name__ == "__main__":
     parser.add_argument("--classifier", type=str, required=True)
     parser.add_argument("--target", type=str, default="")
     parser.add_argument("--profile", type=str, default="dev")
-    parser.add_argument("--features", type=str, default="default")
     parser.add_argument("--enable-zigbuild", type=str, default="false")
     args = parser.parse_args()
 
@@ -78,9 +77,6 @@ if __name__ == "__main__":
         f"--profile={args.profile}",
     ]
 
-    if args.features:
-        cmd += ["--features", args.features]
-
     if enable_zigbuild:
         # Pin glibc to 2.17 if zigbuild has been enabled.
         cmd += ["--target", f"{target}.2.17"]
diff --git a/integrations/spring/pom.xml b/integrations/spring/pom.xml
index 11d3cd0b7..532113960 100644
--- a/integrations/spring/pom.xml
+++ b/integrations/spring/pom.xml
@@ -35,17 +35,19 @@
     </modules>
 
     <properties>
-        <maven.compiler.source>17</maven.compiler.source>
-        <maven.compiler.target>17</maven.compiler.target>
+        <maven.compiler.release>21</maven.compiler.release>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
 
         <!-- dependency -->
-        <opendal.version>0.47.0</opendal.version>
-        <spring-boot.version>3.3.2</spring-boot.version>
+        <lombok.version>1.18.42</lombok.version>
+        <opendal.version>0.48.2</opendal.version>
+        <spring-boot.version>4.0.3</spring-boot.version>
 
         <!-- plugin -->
+        <maven-compiler-plugin.version>3.15.0</maven-compiler-plugin.version>
         <os-maven-plugin.version>1.7.1</os-maven-plugin.version>
-        <spotless-maven-plugin.version>2.43.0</spotless-maven-plugin.version>
+        <spotless-maven-plugin.version>3.2.0</spotless-maven-plugin.version>
     </properties>
 
     <dependencyManagement>
@@ -57,6 +59,11 @@
                 <type>pom</type>
                 <scope>import</scope>
             </dependency>
+            <dependency>
+                <groupId>org.projectlombok</groupId>
+                <artifactId>lombok</artifactId>
+                <version>${lombok.version}</version>
+            </dependency>
         </dependencies>
     </dependencyManagement>
 
@@ -64,7 +71,7 @@
         <dependency>
             <groupId>org.projectlombok</groupId>
             <artifactId>lombok</artifactId>
-            <optional>true</optional>
+            <scope>provided</scope>
         </dependency>
         <dependency>
             <groupId>org.apache.opendal</groupId>
@@ -108,6 +115,20 @@
                     </java>
                 </configuration>
             </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <version>${maven-compiler-plugin.version}</version>
+                <configuration>
+                    <annotationProcessorPaths>
+                        <path>
+                            <groupId>org.projectlombok</groupId>
+                            <artifactId>lombok</artifactId>
+                            <version>${lombok.version}</version>
+                        </path>
+                    </annotationProcessorPaths>
+                </configuration>
+            </plugin>
         </plugins>
     </build>
 

Reply via email to