diff --git a/.github/workflows/check-dependencies.yml b/.github/workflows/check-dependencies.yml
index fa804e260c..0e73f49e40 100644
--- a/.github/workflows/check-dependencies.yml
+++ b/.github/workflows/check-dependencies.yml
@@ -19,10 +19,10 @@ jobs:
steps:
- name: Checkout source
uses: actions/checkout@v4
- - name: Set up JDK 11
- uses: actions/setup-java@v3
+ - name: Set up JDK 21
+ uses: actions/setup-java@v4
with:
- java-version: '11'
+ java-version: '21'
distribution: 'adopt'
- name: use staged maven repo settings
diff --git a/.github/workflows/cluster-test-ci.yml b/.github/workflows/cluster-test-ci.yml
index 3ef269e878..4e41ba857a 100644
--- a/.github/workflows/cluster-test-ci.yml
+++ b/.github/workflows/cluster-test-ci.yml
@@ -14,11 +14,16 @@ jobs:
env:
USE_STAGE: 'false' # Whether to include the stage repository.
+ strategy:
+ fail-fast: false
+ matrix:
+ JAVA_VERSION: ['11', '21']
+
steps:
- - name: Install JDK 11
- uses: actions/setup-java@v3
+ - name: Install JDK ${{ matrix.JAVA_VERSION }}
+ uses: actions/setup-java@v4
with:
- java-version: '11'
+ java-version: ${{ matrix.JAVA_VERSION }}
distribution: 'zulu'
- name: Cache Maven packages
diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml
index d66dc8cee9..66f9dc04bd 100644
--- a/.github/workflows/codeql-analysis.yml
+++ b/.github/workflows/codeql-analysis.yml
@@ -30,10 +30,10 @@ jobs:
uses: actions/checkout@v4
- name: Setup Java JDK
- uses: actions/setup-java@v3
+ uses: actions/setup-java@v4
with:
distribution: 'zulu'
- java-version: '11'
+ java-version: '21'
- name: use staged maven repo settings
if: ${{ env.USE_STAGE == 'true' }}
diff --git a/.github/workflows/commons-ci.yml b/.github/workflows/commons-ci.yml
index 5311ebeee0..d35c48700c 100644
--- a/.github/workflows/commons-ci.yml
+++ b/.github/workflows/commons-ci.yml
@@ -18,11 +18,11 @@ jobs:
strategy:
fail-fast: false
matrix:
- JAVA_VERSION: ['11']
+ JAVA_VERSION: ['11', '21']
steps:
- name: Install JDK ${{ matrix.JAVA_VERSION }}
- uses: actions/setup-java@v3
+ uses: actions/setup-java@v4
with:
java-version: ${{ matrix.JAVA_VERSION }}
distribution: 'zulu'
diff --git a/.github/workflows/pd-store-ci.yml b/.github/workflows/pd-store-ci.yml
index 62006794c7..d01a81deb7 100644
--- a/.github/workflows/pd-store-ci.yml
+++ b/.github/workflows/pd-store-ci.yml
@@ -14,11 +14,15 @@ jobs:
runs-on: ubuntu-latest
env:
USE_STAGE: 'false'
+ strategy:
+ fail-fast: false
+ matrix:
+ JAVA_VERSION: ['11', '21']
steps:
- - name: Install JDK 11
- uses: actions/setup-java@v3
+ - name: Install JDK ${{ matrix.JAVA_VERSION }}
+ uses: actions/setup-java@v4
with:
- java-version: '11'
+ java-version: ${{ matrix.JAVA_VERSION }}
distribution: 'zulu'
- name: Cache Maven packages
@@ -67,11 +71,16 @@ jobs:
TRAVIS_DIR: hugegraph-server/hugegraph-dist/src/assembly/travis
REPORT_DIR: target/site/jacoco
+ strategy:
+ fail-fast: false
+ matrix:
+ JAVA_VERSION: ['11', '21']
+
steps:
- - name: Install JDK 11
- uses: actions/setup-java@v3
+ - name: Install JDK ${{ matrix.JAVA_VERSION }}
+ uses: actions/setup-java@v4
with:
- java-version: '11'
+ java-version: ${{ matrix.JAVA_VERSION }}
distribution: 'zulu'
- name: Cache Maven packages
@@ -157,11 +166,16 @@ jobs:
TRAVIS_DIR: hugegraph-server/hugegraph-dist/src/assembly/travis
REPORT_DIR: target/site/jacoco
+ strategy:
+ fail-fast: false
+ matrix:
+ JAVA_VERSION: ['11', '21']
+
steps:
- - name: Install JDK 11
- uses: actions/setup-java@v3
+ - name: Install JDK ${{ matrix.JAVA_VERSION }}
+ uses: actions/setup-java@v4
with:
- java-version: '11'
+ java-version: ${{ matrix.JAVA_VERSION }}
distribution: 'zulu'
- name: Cache Maven packages
@@ -261,11 +275,16 @@ jobs:
BACKEND: hstore
RELEASE_BRANCH: ${{ startsWith(github.ref_name, 'release-') || startsWith(github.ref_name, 'test-') || startsWith(github.base_ref, 'release-') }}
+ strategy:
+ fail-fast: false
+ matrix:
+ JAVA_VERSION: ['11', '21']
+
steps:
- - name: Install JDK 11
- uses: actions/setup-java@v3
+ - name: Install JDK ${{ matrix.JAVA_VERSION }}
+ uses: actions/setup-java@v4
with:
- java-version: '11'
+ java-version: ${{ matrix.JAVA_VERSION }}
distribution: 'zulu'
- name: Cache Maven packages
diff --git a/.github/workflows/server-ci.yml b/.github/workflows/server-ci.yml
index 586e36da49..1995f787cf 100644
--- a/.github/workflows/server-ci.yml
+++ b/.github/workflows/server-ci.yml
@@ -28,7 +28,7 @@ jobs:
fail-fast: false
matrix:
BACKEND: [ memory, rocksdb, hbase ]
- JAVA_VERSION: [ '11' ]
+ JAVA_VERSION: [ '11', '21' ]
steps:
- name: Checkout
diff --git a/hugegraph-cluster-test/hugegraph-clustertest-minicluster/pom.xml b/hugegraph-cluster-test/hugegraph-clustertest-minicluster/pom.xml
index b59648304f..9d001f409a 100644
--- a/hugegraph-cluster-test/hugegraph-clustertest-minicluster/pom.xml
+++ b/hugegraph-cluster-test/hugegraph-clustertest-minicluster/pom.xml
@@ -57,8 +57,7 @@
org.projectlombok
lombok
- 1.18.24
- compile
+ provided
diff --git a/hugegraph-cluster-test/hugegraph-clustertest-test/pom.xml b/hugegraph-cluster-test/hugegraph-clustertest-test/pom.xml
index 735ea66b43..bae21758b3 100644
--- a/hugegraph-cluster-test/hugegraph-clustertest-test/pom.xml
+++ b/hugegraph-cluster-test/hugegraph-clustertest-test/pom.xml
@@ -34,6 +34,11 @@
UTF-8
+
+ org.projectlombok
+ lombok
+ provided
+
org.apache.hugegraph
hugegraph-clustertest-minicluster
diff --git a/hugegraph-pd/Dockerfile b/hugegraph-pd/Dockerfile
index 15d19c6f76..f8a9bb07b3 100644
--- a/hugegraph-pd/Dockerfile
+++ b/hugegraph-pd/Dockerfile
@@ -18,7 +18,7 @@
# Dockerfile for HugeGraph PD
# 1st stage: build source code
-FROM maven:3.9.0-eclipse-temurin-11 AS build
+FROM maven:3.9.9-eclipse-temurin-21 AS build
WORKDIR /pkg
@@ -32,7 +32,7 @@ RUN --mount=type=cache,target=/root/.m2 \
# 2nd stage: runtime env
# Note: ZGC (The Z Garbage Collector) is only supported on ARM-Mac with java > 13
-FROM eclipse-temurin:11-jre-jammy
+FROM eclipse-temurin:21-jre-jammy
COPY --from=build /pkg/hugegraph-pd/apache-hugegraph-pd-*/ /hugegraph-pd/
LABEL maintainer="HugeGraph Docker Maintainers "
diff --git a/hugegraph-server/Dockerfile b/hugegraph-server/Dockerfile
index 068719318f..3053464116 100644
--- a/hugegraph-server/Dockerfile
+++ b/hugegraph-server/Dockerfile
@@ -18,7 +18,7 @@
# Dockerfile for HugeGraph Server
# 1st stage: build source code
-FROM maven:3.9.0-eclipse-temurin-11 AS build
+FROM maven:3.9.9-eclipse-temurin-21 AS build
WORKDIR /pkg
@@ -32,7 +32,7 @@ RUN --mount=type=cache,target=/root/.m2 \
# 2nd stage: runtime env
# Note: ZGC (The Z Garbage Collector) is only supported on ARM-Mac with java > 13
-FROM eclipse-temurin:11-jre-jammy
+FROM eclipse-temurin:21-jre-jammy
COPY --from=build /pkg/hugegraph-server/apache-hugegraph-server-*/ /hugegraph-server/
LABEL maintainer="HugeGraph Docker Maintainers "
diff --git a/hugegraph-server/Dockerfile-hstore b/hugegraph-server/Dockerfile-hstore
index 6d3b82b5dc..e616a2e342 100644
--- a/hugegraph-server/Dockerfile-hstore
+++ b/hugegraph-server/Dockerfile-hstore
@@ -18,7 +18,7 @@
# Dockerfile for HugeGraph Server (hstore backend)
# 1st stage: build source code
-FROM maven:3.9.0-eclipse-temurin-11 AS build
+FROM maven:3.9.9-eclipse-temurin-21 AS build
WORKDIR /pkg
@@ -32,7 +32,7 @@ RUN --mount=type=cache,target=/root/.m2 \
# 2nd stage: runtime env
# Note: ZGC (The Z Garbage Collector) is only supported on ARM-Mac with java > 13
-FROM eclipse-temurin:11-jre-jammy
+FROM eclipse-temurin:21-jre-jammy
COPY --from=build /pkg/hugegraph-server/apache-hugegraph-server-*/ /hugegraph-server/
# remove hugegraph.properties and rename hstore.properties.template for default hstore backend
diff --git a/hugegraph-server/hugegraph-api/src/main/java/org/apache/hugegraph/api/cypher/CypherClient.java b/hugegraph-server/hugegraph-api/src/main/java/org/apache/hugegraph/api/cypher/CypherClient.java
index 92ae18c54d..7e0134178d 100644
--- a/hugegraph-server/hugegraph-api/src/main/java/org/apache/hugegraph/api/cypher/CypherClient.java
+++ b/hugegraph-server/hugegraph-api/src/main/java/org/apache/hugegraph/api/cypher/CypherClient.java
@@ -35,8 +35,7 @@
import org.apache.tinkerpop.gremlin.driver.Cluster;
import org.apache.tinkerpop.gremlin.driver.Result;
import org.apache.tinkerpop.gremlin.driver.ResultSet;
-import org.apache.tinkerpop.gremlin.driver.Tokens;
-import org.apache.tinkerpop.gremlin.driver.message.RequestMessage;
+import org.apache.tinkerpop.gremlin.util.message.RequestMessage;
import org.slf4j.Logger;
@ThreadSafe
@@ -90,9 +89,9 @@ public CypherModel submitQuery(String cypherQuery, @Nullable Map
}
private RequestMessage createRequest(String cypherQuery) {
- return RequestMessage.build(Tokens.OPS_EVAL)
+ return RequestMessage.build("eval")
.processor("cypher")
- .add(Tokens.ARGS_GREMLIN, cypherQuery)
+ .addArg("gremlin", cypherQuery)
.create();
}
diff --git a/hugegraph-server/hugegraph-api/src/main/java/org/apache/hugegraph/opencypher/CypherOpProcessor.java b/hugegraph-server/hugegraph-api/src/main/java/org/apache/hugegraph/opencypher/CypherOpProcessor.java
index dfad9b9594..e5cde22014 100644
--- a/hugegraph-server/hugegraph-api/src/main/java/org/apache/hugegraph/opencypher/CypherOpProcessor.java
+++ b/hugegraph-server/hugegraph-api/src/main/java/org/apache/hugegraph/opencypher/CypherOpProcessor.java
@@ -19,7 +19,7 @@
import static java.util.Collections.emptyMap;
import static java.util.Collections.singletonList;
import static java.util.Optional.empty;
-import static org.apache.tinkerpop.gremlin.driver.message.ResponseStatusCode.SERVER_ERROR;
+import static org.apache.tinkerpop.gremlin.util.message.ResponseStatusCode.SERVER_ERROR;
import static org.opencypher.gremlin.translation.StatementOption.EXPLAIN;
import static org.slf4j.LoggerFactory.getLogger;
@@ -33,11 +33,10 @@
import java.util.concurrent.FutureTask;
import java.util.concurrent.TimeUnit;
-import org.apache.tinkerpop.gremlin.driver.Tokens;
-import org.apache.tinkerpop.gremlin.driver.message.RequestMessage;
-import org.apache.tinkerpop.gremlin.driver.message.ResponseMessage;
-import org.apache.tinkerpop.gremlin.driver.message.ResponseStatusCode;
import org.apache.tinkerpop.gremlin.process.traversal.P;
+import org.apache.tinkerpop.gremlin.util.message.RequestMessage;
+import org.apache.tinkerpop.gremlin.util.message.ResponseMessage;
+import org.apache.tinkerpop.gremlin.util.message.ResponseStatusCode;
import org.apache.tinkerpop.gremlin.process.traversal.TraversalSource;
import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.DefaultGraphTraversal;
import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal;
@@ -123,7 +122,7 @@ public Optional> selectOther(Context ctx) {
private void evalCypher(Context context) throws OpProcessorException {
Map args = context.getRequestMessage().getArgs();
- String cypher = (String) args.get(Tokens.ARGS_GREMLIN);
+ String cypher = (String) args.get("gremlin");
logger.trace("Cypher: {}", cypher.replaceAll("\n", " "));
GraphTraversalSource gts = traversal(context);
@@ -183,8 +182,8 @@ private GraphTraversalSource traversal(Context context) throws OpProcessorExcept
RequestMessage msg = context.getRequestMessage();
GraphManager graphManager = context.getGraphManager();
- Optional
+
+ org.apache.tinkerpop
+ gremlin-util
+ ${tinkerpop.version}
+
org.apache.tinkerpop
gremlin-server
diff --git a/hugegraph-server/update.md b/hugegraph-server/update.md
new file mode 100644
index 0000000000..a9ebe69e0c
--- /dev/null
+++ b/hugegraph-server/update.md
@@ -0,0 +1,141 @@
+# TinkerPop 3.5.1 → 3.8.1 升级 & JDK 21 支持变更记录
+
+## 概述
+
+1. 将项目依赖的 Apache TinkerPop 版本从 **3.5.1** 升级至 **3.8.1**,涉及大量 API 破坏性变更适配。
+2. 将项目 JDK 版本从 **JDK 11** 升级至 **JDK 21**,同时保留 JDK 11 兼容性(CI 双版本矩阵测试)。
+3. 编译验证已通过(`mvn clean compile -DskipTests`,全部 40 个模块 BUILD SUCCESS)。
+
+---
+
+## 一、版本号变更
+
+| 文件 | 变更内容 |
+|------|---------|
+| `hugegraph-struct/pom.xml` | `3.5.1` → `3.8.1` |
+| `hugegraph-struct/pom.xml` | `gremlin-shaded` 硬编码版本 `3.5.1` → `${tinkerpop.version}` |
+| `hugegraph-server/pom.xml` | `3.5.1` → `3.8.1` |
+| `hugegraph-server/.../CoreVersion.java` | `GREMLIN_VERSION = "3.5.1"` → `"3.8.1"` |
+
+---
+
+## 二、新增依赖
+
+**`hugegraph-server/pom.xml`** 新增 `gremlin-util` 依赖(TinkerPop 3.5.x 将 `RequestMessage`/`ResponseMessage`/`ResponseStatusCode` 等类从 `gremlin-driver` 迁移至该模块):
+
+```xml
+
+ org.apache.tinkerpop
+ gremlin-util
+ ${tinkerpop.version}
+
+```
+
+---
+
+## 三、API 破坏性变更适配
+
+### 3.1 `P` 构造函数:`BiPredicate` → `PBiPredicate`
+
+TinkerPop 3.8.x 中 `P` 的构造函数参数从 `java.util.function.BiPredicate` 改为自定义接口 `PBiPredicate`。
+
+| 文件 | 变更 |
+|------|------|
+| `ConditionP.java` | `import java.util.function.BiPredicate` → `import org.apache.tinkerpop.gremlin.process.traversal.PBiPredicate`;构造函数参数类型相应修改 |
+| `Condition.java` | `RelationType` 枚举声明从 `implements BiPredicate` → `implements PBiPredicate` |
+
+### 3.2 `AggregateGlobalStep`/`AggregateLocalStep` 合并为 `AggregateStep`
+
+TinkerPop 3.8.x 将 `AggregateGlobalStep` 和 `AggregateLocalStep` 合并为单一的 `AggregateStep`。
+
+| 文件 | 变更 |
+|------|------|
+| `HugeCountStepStrategy.java` | 移除 `AggregateGlobalStep` 和 `AggregateLocalStep` 的 import,合并为 `AggregateStep`;相应的 `instanceof` 条件判断也合并 |
+
+### 3.3 `HasContainerHolder` 变为泛型接口
+
+TinkerPop 3.8.x 中 `HasContainerHolder` 从原始类型变为 `HasContainerHolder` 泛型接口,且 `getHasContainers()` 返回类型变为 `Iterable>`。
+
+| 文件 | 变更 |
+|------|------|
+| `QueryHolder.java` | 接口声明从 `extends HasContainerHolder` → `extends HasContainerHolder` |
+| `HugeGraphStep.java` | 类声明改为 `implements QueryHolder` |
+| `HugeVertexStep.java` | 类声明改为 `implements QueryHolder` |
+| `TraversalUtil.java` | 多处添加 `@SuppressWarnings({"rawtypes", "unchecked"})`;`getHasContainers()` 返回值使用 `Object` 类型遍历后强制转换为 `HasContainer` |
+
+### 3.4 `Mutating.configure()` 迁移至 `Configuring` 接口
+
+TinkerPop 3.8.x 将 `configure()` 方法从 `Mutating` 接口移至新的 `Configuring` 接口。
+
+| 文件 | 变更 |
+|------|------|
+| `HugePrimaryKeyStrategy.java` | `Mutating` import → `Configuring`;`curAddStep` 变量类型相应修改 |
+
+### 3.5 `RequestMessage`/`ResponseMessage`/`ResponseStatusCode` 包迁移 + `Tokens` 移除
+
+TinkerPop 3.8.x 将这些类从 `org.apache.tinkerpop.gremlin.driver.message` 迁移至 `org.apache.tinkerpop.gremlin.util.message`,并移除了 `Tokens` 常量类,所有 `Tokens.*` 常量需改为字符串字面量。
+
+| 文件 | 变更 |
+|------|------|
+| `CypherClient.java` | import 路径改为 `gremlin.util.message`;移除 `Tokens` import;`Tokens.OPS_EVAL` → `"eval"`;`.add(Tokens.ARGS_GREMLIN, ...)` → `.addArg("gremlin", ...)` |
+| `CypherOpProcessor.java` | `ResponseStatusCode`/`RequestMessage`/`ResponseMessage` import 路径改为 `gremlin.util.message`;移除 `Tokens` import;所有 `Tokens.*` 常量替换为字符串字面量:`ARGS_GREMLIN` → `"gremlin"`、`ARGS_ALIASES` → `"aliases"`、`VAL_TRAVERSAL_SOURCE_ALIAS` → `"g"`、`ARGS_EVAL_TIMEOUT` → `"evaluationTimeout"`、`ARGS_BINDINGS` → `"bindings"` |
+
+### 3.6 `StoreTest` 类被移除
+
+TinkerPop 3.8.x 移除了 `StoreTest` 测试类。
+
+| 文件 | 变更 |
+|------|------|
+| `ProcessBasicSuite.java` | 移除 `StoreTest` 的 import 和 `@Suite.SuiteClasses` 中的引用(2 处) |
+
+---
+
+## 四、修改文件完整列表
+
+```
+hugegraph-struct/pom.xml
+hugegraph-server/pom.xml
+hugegraph-server/hugegraph-core/src/main/java/org/apache/hugegraph/version/CoreVersion.java
+hugegraph-server/hugegraph-core/src/main/java/org/apache/hugegraph/backend/query/Condition.java
+hugegraph-server/hugegraph-core/src/main/java/org/apache/hugegraph/traversal/optimize/ConditionP.java
+hugegraph-server/hugegraph-core/src/main/java/org/apache/hugegraph/traversal/optimize/HugeCountStepStrategy.java
+hugegraph-server/hugegraph-core/src/main/java/org/apache/hugegraph/traversal/optimize/HugeGraphStep.java
+hugegraph-server/hugegraph-core/src/main/java/org/apache/hugegraph/traversal/optimize/HugeVertexStep.java
+hugegraph-server/hugegraph-core/src/main/java/org/apache/hugegraph/traversal/optimize/HugePrimaryKeyStrategy.java
+hugegraph-server/hugegraph-core/src/main/java/org/apache/hugegraph/traversal/optimize/QueryHolder.java
+hugegraph-server/hugegraph-core/src/main/java/org/apache/hugegraph/traversal/optimize/TraversalUtil.java
+hugegraph-server/hugegraph-api/src/main/java/org/apache/hugegraph/api/cypher/CypherClient.java
+hugegraph-server/hugegraph-api/src/main/java/org/apache/hugegraph/opencypher/CypherOpProcessor.java
+hugegraph-server/hugegraph-test/src/main/java/org/apache/hugegraph/tinkerpop/ProcessBasicSuite.java
+```
+
+---
+
+## 五、JDK 11 → JDK 21 升级
+
+### 5.1 Maven 编译版本
+
+| 文件 | 变更内容 |
+|------|---------|
+| `pom.xml` | `maven.compiler.source/target` 11 → 21;`maven-compiler-plugin` 3.1 → 3.11.0;`compilerArguments` → `compilerArgs`;`lombok` 1.18.30 → 1.18.34 |
+| `hugegraph-struct/pom.xml` | `maven.compiler.source/target` 11 → 21 |
+
+### 5.2 CI Workflow(全部新增 JDK 21 矩阵,同时保留 JDK 11)
+
+| 文件 | 变更内容 |
+|------|---------|
+| `.github/workflows/server-ci.yml` | `JAVA_VERSION: ['11']` → `['11', '21']` |
+| `.github/workflows/commons-ci.yml` | `JAVA_VERSION: ['11']` → `['11', '21']`;`setup-java@v3` → `v4` |
+| `.github/workflows/pd-store-ci.yml` | `struct`/`pd`/`store`/`hstore` 四个 job 全部新增 `strategy.matrix.JAVA_VERSION: ['11', '21']`;`setup-java@v3` → `v4` |
+| `.github/workflows/cluster-test-ci.yml` | 新增 `strategy.matrix.JAVA_VERSION: ['11', '21']`;`setup-java@v3` → `v4` |
+| `.github/workflows/check-dependencies.yml` | JDK 11 → 21;`setup-java@v3` → `v4` |
+| `.github/workflows/codeql-analysis.yml` | JDK 11 → 21;`setup-java@v3` → `v4` |
+
+### 5.3 Dockerfile(基础镜像升级)
+
+| 文件 | 变更内容 |
+|------|---------|
+| `hugegraph-server/Dockerfile` | `maven:3.9.0-eclipse-temurin-11` → `maven:3.9.9-eclipse-temurin-21`;`eclipse-temurin:11-jre` → `eclipse-temurin:21-jre` |
+| `hugegraph-pd/Dockerfile` | 同上 |
+| `hugegraph-store/Dockerfile` | 同上 |
+| `hugegraph-server/Dockerfile-hstore` | 同上 |
diff --git a/hugegraph-store/Dockerfile b/hugegraph-store/Dockerfile
index 43daa48e94..edb4685cf1 100644
--- a/hugegraph-store/Dockerfile
+++ b/hugegraph-store/Dockerfile
@@ -18,7 +18,7 @@
# Dockerfile for HugeGraph Store
# 1st stage: build source code
-FROM maven:3.9.0-eclipse-temurin-11 AS build
+FROM maven:3.9.9-eclipse-temurin-21 AS build
WORKDIR /pkg
@@ -32,7 +32,7 @@ RUN --mount=type=cache,target=/root/.m2 \
# 2nd stage: runtime env
# Note: ZGC (The Z Garbage Collector) is only supported on ARM-Mac with java > 13
-FROM eclipse-temurin:11-jre-jammy
+FROM eclipse-temurin:21-jre-jammy
COPY --from=build /pkg/hugegraph-store/apache-hugegraph-store-*/ /hugegraph-store/
LABEL maintainer="HugeGraph Docker Maintainers "
diff --git a/hugegraph-struct/pom.xml b/hugegraph-struct/pom.xml
index b88d0ae204..dc14a8fa47 100644
--- a/hugegraph-struct/pom.xml
+++ b/hugegraph-struct/pom.xml
@@ -30,11 +30,11 @@
- 11
- 11
+ 21
+ 21
UTF-8
25.1-jre
- 3.5.1
+ 3.8.1
@@ -86,7 +86,7 @@
org.apache.tinkerpop
gremlin-shaded
- 3.5.1
+ ${tinkerpop.version}
org.mindrot
diff --git a/pom.xml b/pom.xml
index 850ac99fa8..5fe0400ac6 100644
--- a/pom.xml
+++ b/pom.xml
@@ -89,10 +89,10 @@
5.6.0
1.7.0
1.7.0
- 1.18.30
+ 1.18.34
hugegraph
- 11
- 11
+ 21
+ 21
UTF-8
bash
1.5.0
@@ -252,14 +252,13 @@
maven-compiler-plugin
- 3.1
+ 3.11.0
${maven.compiler.source}
${maven.compiler.target}
-
- 500
-
+ -Xmaxerrs
+ 500
-Xlint:unchecked
diff --git a/users.md b/users.md
new file mode 100644
index 0000000000..af5297c84f
--- /dev/null
+++ b/users.md
@@ -0,0 +1,207 @@
+# JDK 11 vs JDK 21 差异分析
+
+## JDK 11 已知漏洞
+
+JDK 11 自 2018 年发布以来,累积了不少已知 CVE 漏洞。以下为主要高危和中危漏洞列表:
+
+### 严重/高危 (Critical/High)
+
+| CVE | 影响组件 | 描述 | 修复版本 |
+|-----|---------|------|---------|
+| CVE-2023-22025 | Hotspot | 未经认证的远程攻击者可导致 JVM 崩溃 | 11.0.21 |
+| CVE-2023-21967 | JSSE (TLS) | TLS 握手拒绝服务 | 11.0.19 |
+| CVE-2023-21939 | JSSE | 证书解析漏洞,可导致信息泄露 | 11.0.19 |
+| CVE-2023-21938 | JSSE | 整数溢出导致拒绝服务 | 11.0.19 |
+| CVE-2023-21930 | JSSE | 远程代码执行风险 | 11.0.19 |
+| CVE-2022-21628 | 序列化 | 反序列化导致拒绝服务 (DoS) | 11.0.17 |
+| CVE-2022-21626 | Security | 密码操作中的 DoS 漏洞 | 11.0.17 |
+| CVE-2022-21624 | Serialization | 序列化过滤绕过 | 11.0.17 |
+| CVE-2022-21476 | JCA | 椭圆曲线签名算法绕过 | 11.0.15 |
+| CVE-2022-21449 | JCA | ECDSA 签名验证绕过(高危!) | 11.0.15 |
+| CVE-2021-35586 | TLS | TLS 1.3 握手拒绝服务 | 11.0.13 |
+| CVE-2021-35578 | TLS | TLS 1.3 握手拒绝服务 | 11.0.13 |
+| CVE-2021-35567 | TLS | 证书路径验证绕过 | 11.0.13 |
+| CVE-2021-2388 | Hotspot | 编译器漏洞,可导致逃逸 | 11.0.11 |
+
+### 中危 (Medium)
+
+| CVE | 描述 | 修复版本 |
+|-----|------|---------|
+| CVE-2023-22006 | 未授权访问网络资源 | 11.0.21 |
+| CVE-2023-21968 | 本地低权限用户可修改关键数据 | 11.0.19 |
+| CVE-2023-21954 | XML 外部实体注入 (XXE) | 11.0.19 |
+| CVE-2022-21618 | 密钥协商处理不当 | 11.0.17 |
+| CVE-2022-21434 | 未经授权的数据访问 | 11.0.15 |
+| CVE-2022-21426 | XSLT 处理中的漏洞 | 11.0.15 |
+
+### 对 HugeGraph 的影响
+
+- 如果使用的 JDK 11 版本低于 **11.0.21**,CVE-2022-21449 (ECDSA 签名绕过) 和 CVE-2023-21930 (远程代码执行风险) 是最需要关注的漏洞
+- HugeGraph 作为对外提供 REST API 的服务,TLS/JSSE 相关漏洞(CVE-2023-21930 系列)尤其值得警惕
+- 反序列化漏洞(CVE-2022-21628)对 Java 序列化场景有影响
+- **建议直接使用 JDK 21,可避免以上所有漏洞**
+
+---
+
+## JDK 11 与 JDK 21 功能差异
+
+JDK 11 到 JDK 21 跨越了 10 个版本(11 → 17 LTS → 21 LTS),累积了大量新特性。
+
+### 语言特性
+
+| 特性 | JDK 11 | JDK 17 | JDK 21 |
+|------|--------|--------|--------|
+| Switch 表达式 | ❌ | ✅ | ✅ |
+| 文本块 (Text Blocks) | ❌ | ✅ | ✅ |
+| Record 类 | ❌ | ✅ | ✅ |
+| 模式匹配 instanceof | ❌ | ✅ | ✅ |
+| 密封类 (Sealed Classes) | ❌ | ✅ | ✅ |
+| Record 模式匹配 | ❌ | ❌ | ✅ |
+| Switch 模式匹配 | ❌ | ❌ | ✅ (Preview) |
+| 虚拟线程 (Virtual Threads) | ❌ | ❌ | ✅ |
+| 字符串模板 | ❌ | ❌ | ✅ (Preview) |
+| 未命名变量/模式 | ❌ | ❌ | ✅ |
+| 外部函数与内存 API | ❌ | ❌ | ✅ (Preview) |
+| 作用域值 (Scoped Values) | ❌ | ❌ | ✅ (Preview) |
+| 结构化并发 (Structured Concurrency) | ❌ | ❌ | ✅ (Preview) |
+
+### JVM & 运行时
+
+| 特性 | JDK 11 | JDK 17 | JDK 21 |
+|------|--------|--------|--------|
+| 默认 GC | G1 | G1(优化) | G1(大幅优化) |
+| ZGC (低延迟 GC) | 实验性 | 生产就绪 | 生产就绪(持续优化,<1ms 暂停) |
+| Shenandoah GC | ❌ | 生产就绪 | 生产就绪 |
+| Generational ZGC | ❌ | ❌ | ✅ |
+| CDS (类数据共享) | 基础 | 动态 CDS + AppCDS | 动态 CDS + AppCDS 增强 |
+| JFR (飞行记录器) | 基础 | 流式 JFR | 持续优化 |
+| 启动时间优化 | 基础 | 显著改进 | 进一步优化 |
+| Vector API | ❌ | ✅ (Incubator) | ✅ (Incubator,持续迭代) |
+| 外部函数与内存 API | ❌ | ✅ (Incubator) | ✅ (Preview,接近稳定) |
+| 分代式 ZGC | ❌ | ❌ | ✅ |
+| Linux/RISC-V 移植 | ❌ | ❌ | ✅ |
+
+### 核心类库
+
+| 特性 | JDK 11 | JDK 17 | JDK 21 |
+|------|--------|--------|--------|
+| `HttpClient` | 标准 API | 增强(HTTP/2, WebSocket) | 增强 |
+| `SequencedCollection` 接口 | ❌ | ❌ | ✅ |
+| `Stream.toList()` | ❌ | ✅ | ✅ |
+| `Map.ofEntries()` / `List.of()` 增强 | 基础 | ✅ | ✅ |
+| `ProcessHandle` | 基础 | 增强 | 增强 |
+| 伪随机数生成器 | 基础 | 新接口 `RandomGenerator` | 增强 |
+| `ByteBuffer` 增强 | 基础 | ✅ | ✅ |
+| 字符集增强 | 基础 | ✅ | ✅ |
+
+### 废弃与移除
+
+| 项目 | JDK 11 | JDK 17 | JDK 21 |
+|------|--------|--------|--------|
+| Applet API | 废弃 | 移除 | 已移除 |
+| RMI Activation | 存在 | 移除 | 已移除 |
+| Security Manager | 存在 | 废弃 | 废弃(未来将移除) |
+| CMS GC | 废弃 | 移除 | 已移除 |
+| Nashorn JavaScript 引擎 | 废弃 | 移除 | 已移除 |
+| `finalize()` | 存在 | 废弃 | 废弃 |
+| 偏向锁 | 默认开启 | 禁用 | 移除 |
+| `Thread.stop/Thread.suspend` | 存在 | 废弃 | 废弃 |
+| 32-bit 平台 | 支持 | 废弃 | 不再支持 |
+
+---
+
+## 对 HugeGraph 项目最相关的亮点
+
+### 1. 虚拟线程 (JDK 21) — Project Loom
+
+HugeGraph 作为 REST API 服务,处理大量并发请求时,虚拟线程能带来巨大优势:
+- 海量 IO 密集型任务几乎零成本创建
+- 无需线程池,代码更简洁
+- 极大提升吞吐量,尤其在高并发查询场景
+
+### 2. ZGC 生产就绪 (JDK 21)
+
+图数据库内存占用大、对象关系复杂:
+- ZGC 亚毫秒级暂停(<1ms),最大暂停时间不受堆大小影响
+- 分代式 ZGC(JDK 21)进一步降低内存和 CPU 开销
+- 适合大堆场景(百 GB 级别),减少 Full GC 风险
+
+### 3. Record 类 (JDK 17)
+
+适合替代 HugeGraph 中大量 DTO/POJO/配置类:
+```java
+// 替代冗长的 POJO
+public record VertexRecord(String id, String label, Map properties) {}
+```
+减少样板代码,提高可读性。
+
+### 4. 模式匹配 (JDK 17/21)
+
+简化图遍历和查询处理中的类型判断:
+```java
+// JDK 11
+if (obj instanceof Vertex) {
+ Vertex v = (Vertex) obj;
+ return v.id();
+}
+
+// JDK 17+
+if (obj instanceof Vertex v) {
+ return v.id();
+}
+```
+
+### 5. CDS + AppCDS 增强 (JDK 17/21)
+
+HugeGraph 启动时加载大量类,AppCDS 可显著减少启动时间,对开发和部署都有帮助。
+
+---
+
+## 结论
+
+- **安全性**:JDK 21 避免了 JDK 11 的数十个已知 CVE 漏洞
+- **性能**:GC(ZGC/G1/Shenandoah)大幅优化,虚拟线程提升并发能力
+- **开发体验**:Record、模式匹配、文本块等新特性提升代码质量和开发效率
+- **兼容性**:JDK 21 完全向后兼容,无需修改现有 JDK 11 代码即可运行
+
+**强烈建议在开发和生产环境中使用 JDK 21。**
+
+---
+
+## 版本修改记录
+
+### 2026-06-04 — JDK 21 兼容性修复
+
+编译环境:**OpenJDK 21.0.11** (Homebrew, macOS ARM64)
+
+#### 问题描述
+
+在 JDK 21 环境下执行 `mvn clean compile -DskipTests`,`hugegraph-clustertest-minicluster` 和 `hugegraph-clustertest-test` 模块编译失败。
+
+**错误信息**:
+```
+Fatal error compiling: java.lang.NoSuchFieldError:
+Class com.sun.tools.javac.tree.JCTree$JCImport does not have member field
+'com.sun.tools.javac.tree.JCTree qualid'
+```
+
+**根因**:
+1. `maven-compiler-plugin:3.1`(2014年发布)内部使用的 Lombok 注解处理器依赖 JDK 内部 `JCTree$JCImport.qualid` 字段,该字段在 JDK 21 中已被移除
+2. `hugegraph-clustertest-test` 模块使用了 `@Slf4j` 注解但缺少 Lombok 依赖
+
+#### 修改清单
+
+| # | 文件 | 修改内容 | 说明 |
+|---|------|---------|------|
+| 1 | `pom.xml` | `maven-compiler-plugin` 版本 `3.1` → `3.11.0` | 3.11.0 支持 JDK 21,同时将 `compilerArguments` 迁移为 `compilerArgs` 标准写法 |
+| 2 | `pom.xml` | `lombok.version` `1.18.30` → `1.18.34` | 1.18.34 适配 JDK 21 内部 API 变更 |
+| 3 | `hugegraph-cluster-test/hugegraph-clustertest-minicluster/pom.xml` | Lombok 依赖修复:移除硬编码版本 `1.18.24`,scope `compile` → `provided` | 统一使用父 POM 管理的版本,避免版本冲突;`provided` 是 Lombok 的正确 scope |
+| 4 | `hugegraph-cluster-test/hugegraph-clustertest-test/pom.xml` | 新增 Lombok `provided` 依赖 | 该模块使用了 `@Slf4j` 注解但缺少依赖 |
+
+#### 编译结果
+
+```
+[INFO] BUILD SUCCESS
+[INFO] Total time: 55.422 s
+[INFO] 全部 38 个模块编译成功
+```