跳转到主要内容

这是本节的多页打印视图。 .

返回本页常规视图.

贡献指南

提交代码或文档前,请先阅读贡献流程。Committer 提名、邮件列表订阅和版本验证分别由对应页面说明;贡献者协议使用 ASF 官方 ICLA/CCLA。

1 - 参与 HugeGraph 社区

选择贡献方式

可以通过 GitHub Issues 报告问题,也可以提交代码、测试或文档。准备较大的改动前,建议先创建 Issue 并说明范围,避免重复工作。

下面以 apache/hugegraph 为例。其他 HugeGraph 仓库的流程相同,但构建和测试命令应以各仓库的 README.md、AGENTS.md 和 CI 配置为准。

准备仓库

在 GitHub 上 Fork HugeGraph 仓库

先在 GitHub 上 fork apache/hugegraph,再克隆自己的 fork:

1git clone https://github.com/<your-name>/hugegraph.git
2cd hugegraph
3git remote add upstream https://github.com/apache/hugegraph.git
4git fetch upstream master

不要直接在 master 上开发。每项改动使用单独分支:

1git switch master
2git merge --ff-only upstream/master
3git switch -c fix/<short-description>

修改和验证

HugeGraph Server 的代码位于 hugegraph-server/。例如,核心模块路径是:

1hugegraph-server/hugegraph-core/src/main/java/org/apache/hugegraph/

当前主仓库根目录的 Maven 模块如下;Server 的存储适配器 hugegraph-server/hugegraph-hstore/ 与独立的存储节点项目 hugegraph-store/ 是不同模块。

路径子模块
hugegraph-server/hugegraph-core/、hugegraph-api/、hugegraph-example/、hugegraph-dist/、hugegraph-test/、hugegraph-rocksdb/、hugegraph-hbase/、hugegraph-hstore/
hugegraph-pd/hg-pd-common/、hg-pd-client/、hg-pd-core/、hg-pd-service/、hg-pd-dist/、hg-pd-cli/、hg-pd-grpc/、hg-pd-test/
hugegraph-store/hg-store-common/、hg-store-client/、hg-store-core/、hg-store-node/、hg-store-dist/、hg-store-cli/、hg-store-grpc/、hg-store-rocksdb/、hg-store-test/
hugegraph-commons/hugegraph-common/、hugegraph-rpc/
hugegraph-cluster-test/hugegraph-clustertest-minicluster/、hugegraph-clustertest-dist/、hugegraph-clustertest-test/
独立根模块hugegraph-struct/、install-dist/

上述名称来自根 pom.xml 及各子项目 pom.xml;代码结构以正在使用的分支为准。

先运行与改动直接相关的测试。Server 常用测试入口如下:

1# Core 测试,使用内存后端
2mvn test -pl hugegraph-server/hugegraph-test -am -P core-test,memory
3
4# API 测试,使用 RocksDB 后端
5mvn test -pl hugegraph-server/hugegraph-test -am -P api-test,rocksdb
6
7# 格式化并检查编译
8mvn editorconfig:format
9mvn clean compile -Dmaven.javadoc.skip=true

GitHub 已不支持通过用户名和密码直接推送代码。需要使用个人访问令牌时,请在令牌设置页创建并按需授权:

使用个人访问令牌认证 Git 推送

提交第三方依赖时,还要同步发行包中的许可证信息:

  1. 把依赖的许可证文件放入 hugegraph-server/hugegraph-dist/release-docs/licenses/。
  2. 更新 hugegraph-server/hugegraph-dist/release-docs/LICENSE;依赖包含 NOTICE 时,同时更新 NOTICE。
  3. 运行 hugegraph-server/hugegraph-dist/scripts/dependency/regenerate_known_dependencies.sh,更新已知依赖清单。

提交 Pull Request

提交代码所用的邮箱需要绑定到 GitHub 账号。请在邮箱设置页完成绑定:

在 GitHub 中验证提交邮箱

提交信息使用 type(module): message 格式,例如:

1git add <changed-files>
2git commit -m "fix(core): handle empty vertex query"
3git push -u origin fix/<short-description>

然后从 fork 分支向 apache/hugegraph:master 创建 Pull Request。说明问题、修改方法和实际运行的验证命令;界面变化应附截图。

处理 Review

CI 失败或 reviewer 要求修改时,在原分支继续提交并推送。需要同步上游时,可以 rebase:

1git fetch upstream master
2git rebase upstream/master
3git push --force-with-lease

不要使用普通 --force 覆盖远端分支。完成所有 CI 和 review 要求后,由项目 maintainer 合并 Pull Request。

Contributor Agreement 使用 ASF 官方流程,见贡献者协议。

2 - 订阅社区邮件列表

HugeGraph 使用 dev@hugegraph.apache.org 讨论开发和使用问题。向列表发信前需要先订阅,否则邮件可能被拦截。

订阅

  1. 使用准备订阅的邮箱向 dev-subscribe@hugegraph.apache.org 发送一封任意主题、任意内容的邮件。
  2. 收到确认邮件后直接回复。
  3. 收到订阅成功邮件后,即可向 dev@hugegraph.apache.org 发信。

如果没有收到确认邮件,先检查垃圾邮件和自动分类目录。仍未收到时,等待一段时间后重新发送订阅邮件。

未订阅也可以在 ASF Mailing List Archives 浏览公开邮件。

退订

  1. 使用订阅邮箱向 dev-unsubscribe@hugegraph.apache.org 发信。
  2. 收到 dev-help@hugegraph.apache.org 的确认邮件后直接回复。
  3. 收到主题包含 GOODBYE 的邮件后,退订完成。

ASF 邮件列表的通用说明见 Apache Mailing Lists。

3 - 验证 Apache 发版

Note: 这篇文档会持续更新。 HugeGraph 1.8.0 的源码构建与发行包运行验证统一使用 Java 17。

毕业说明:Apache HugeGraph 已于 2026 年 1 月毕业。正式发版投票现由 HugeGraph 社区内部完成(dev@hugegraph.apache.org 上的 PMC binding 投票),不再需要 Incubator general@incubator.apache.org 审批。

自动化发版验证

Workflow 与 dist/validate-release.sh 共用 Java 17 校验逻辑。发行版本与 SVN RC 路径分别指定, Maven staging repository 使用投票邮件中的地址。Server/Toolchain 四个源码和二进制包是必需项, 同一候选目录也可包含 AI、Computer 源码包。每个包均须附带 SHA512 与 GPG 签名;未知包名和版本不符会阻断验证。 所有包均检查完整性、内容和许可证,Computer 源码另执行 Maven 构建;AI、Computer 产品运行验证需另行完成。

1bash dist/validate-release.sh --svn-path 1.8.0/RC1 \
2  --staging-repository https://repository.apache.org/content/repositories/<staging-id>/ 1.8.0 imbajin
3# 原有本地包位置参数接口保留:
4bash dist/validate-release.sh 1.8.0 imbajin /path/to/rc 17

严格 RC 模式使用全新、相互隔离的 Maven 仓库,不预装本地 Server SDK。 源码构建产物和下载的二进制包分别执行 Server、Client、普通 Loader、Tools 与 Hubble 业务断言,失败后保留日志。 Workflow 的 source-prevalidation 模式使用明确的 Server/Toolchain commit SHA 和无签名源码归档, 它不证明真实 RC 签名、下载及远端 staging 依赖解析已通过。 license-review-*.txt 中的许可选择和例外仍需人工复核,明确的 Category-X-only 依赖会阻断验证;自动成功不等于发布批准。 本地预验证和证据目录说明见验证脚本指南。

控制台和 GitHub Job Summary 汇总结果、失败阶段、复核提示及日志位置;源码预验证不会显示为 RC 验收通过。

验证阶段

当内部的临时发布和打包工作完成后,其他的社区开发者 (尤其是 PMC) 需要按 ASF 发版规范参与验证,可参考:

1. 准备工作

如果本地没有 svn 或 gpg 或 wget 环境,建议先安装一下 (windows 推荐使用 WSL2 环境, 或者至少是 git-bash), 同时确保安装 Java 17 和 maven 软件。

 1# 1. 安装svn
 2# ubuntu/debian
 3sudo apt install subversion -y
 4# MacOS
 5brew install subversion
 6# 验证安装是否成功, 执行以下命令:
 7svn --version
 8
 9# 2. 安装gpg
10# ubuntu/debian
11sudo apt-get install gnupg -y
12# MacOS
13brew install gnupg
14# 验证安装是否成功, 执行以下命令:
15gpg --version
16
17# 3. 安装wget
18# ubuntu/debian
19sudo apt-get install wget -y
20# MacOS
21brew install wget
22
23# 4. 下载 hugegraph-svn 目录 (版本号注意填写此次验证版本)
24svn co https://dist.apache.org/repos/dist/dev/hugegraph/1.x.x/
25# (注) 如果出现 svn 下载某个文件速度很慢的情况, 可以考虑 wget 单个文件下载, 如下 (或考虑使用 VPN / 代理)
26wget https://dist.apache.org/repos/dist/dev/hugegraph/1.x.x/apache-hugegraph-toolchain-1.x.x.tar.gz

2. 检查 hash 值

首先需要检查 source + binary 包的文件完整性,通过 shasum 进行校验,确保和发布到 apache/github 上的 hash 值一致 (一般是 sha512)

1执行命令:
2for i in *.tar.gz; do echo $i; shasum -a 512 --check  $i.sha512; done

3. 检查 gpg 签名

这个就是为了确保发布的包是由可信赖的人上传的,假设 tom 签名后上传,其他人应该下载 A 的公钥 然后进行签名确认, 相关命令:

 1# 1. 下载项目可信赖公钥到本地 (首次需要) & 导入
 2curl  https://downloads.apache.org/hugegraph/KEYS > KEYS
 3gpg --import KEYS
 4
 5# 导入后可以看到如下输出, 这代表导入了 x 个用户公钥
 6gpg: /home/ubuntu/.gnupg/trustdb.gpg: trustdb created
 7gpg: key BA7E78F8A81A885E: public key "imbajin (apache mail) <jin@apache.org>" imported
 8gpg: key 818108E7924549CC: public key "vaughn <vaughn@apache.org>" imported
 9gpg: key 28DCAED849C4180E: public key "coderzc (CODE SIGNING KEY) <zhaocong@apache.org>" imported
10....
11gpg: Total number processed: x
12gpg:               imported: x
13
14# 2. 将完整主密钥指纹与发版投票邮件中的签名者指纹对照
15release_signer_fingerprint='<signer-full-fingerprint>'
16gpg --fingerprint -- "$release_signer_fingerprint"
17
18# 3. 在子 shell 中验证,失败时停止检查但不退出交互终端
19(
20  for archive in *.tar.gz; do
21    gpg --status-fd 1 --verify -- "$archive.asc" "$archive" > "$archive.status" || {
22      status=$?
23      printf 'Signature verification failed: %s\n' "$archive" >&2
24      cat "$archive.status"
25      exit "$status"
26    }
27    cat "$archive.status"
28    if grep -Eq '^\[GNUPG:\] (REVKEYSIG|EXPKEYSIG|EXPSIG)( |$)' "$archive.status"; then
29      printf 'Expired or revoked signature: %s\n' "$archive" >&2
30      exit 1
31    fi
32    grep -q '^\[GNUPG:\] VALIDSIG ' "$archive.status" || {
33      printf 'Missing valid signature: %s\n' "$archive" >&2
34      exit 1
35    }
36  done
37)

必须同时确认验证退出码为零,且 VALIDSIG 中的指纹对应投票邮件的签名者;使用签名子密钥时,核对其报告的主密钥指纹。 密钥信任警告本身不表示签名无效,也不能只凭本地化的 Good signature 文本判断成功。 即使同时出现 VALIDSIG 或退出码为零,遇到 REVKEYSIG、EXPKEYSIG、EXPSIG 仍须停止,交由发版负责人复核或更新候选包。 格式见 GnuPG 状态说明。

先确认了整体的"完整性 + 一致性", 然后接下来确认具体的内容 (关键)

4. 检查压缩包内容

这里检查准备工作下载的压缩包内容。分源码包 + 二进制包两个方面,源码包更为严格,挑核心的部分说 (完整的列表可参考官方 Wiki, 比较长)

A. 源码包

解压 *hugegraph*src.tar.gz后,进行如下检查:

  1. 包名/目录名应符合当前发版命名(历史版本可能仍包含 incubating),且不存在空的文件/文件夹
  2. 存在 LICENSE + NOTICE 且内容正常;历史版本若在项目孵化期发布,还需检查 DISCLAIMER
  3. 不存在 缺乏 License 的二进制文件
  4. 源码文件都包含标准 ASF License 头 (这个用插件跑一下为主)
  5. 检查每个父 / 子模块的 pom.xml 版本号是否一致 (且符合期望)
  6. 最后,确保源码可以正常 / 正确编译 (然后看看测试和规范)

PMC 同学请特别注意认真检查 LICENSE + NOTICE 文件,确保文件严格遵循了 ASF 的发版要求, 大部分的发版问题都与之相关

1# 请优先使用/切换到 `java 17` 版本进行后序的编译和运行操作 (注:`Computer` 仅支持 `java >= 11`)
2# java --version
3
4# 尝试在 Unix 环境下编译测试是否正常
5mvn -s /path/to/staging-settings.xml -Dmaven.repo.local=/path/to/fresh-m2 \
6  clean install -Papache-release -DskipTests -Dgpg.skip=true

手动 Maven 命令的 settings 必须指向投票邮件中的 staging repository,并使用全新的本地仓库。 不要预装本地 Server SDK 来掩盖 staging 缺少依赖;自动化验证脚本会生成这些设置。

B. 二进制包

解压 xxx-hugegraph.tar.gz后,进行如下检查:

  1. 包名/目录名应符合当前发版命名(历史版本可能仍包含 incubating)
  2. 存在 LICENSE + NOTICE 且内容正常(历史版本若在项目孵化期发布,还需检查 DISCLAIMER)
  3. 服务启动
 1# hugegraph-server
 2bin/start-hugegraph.sh
 3
 4# hugegraph-loader
 5bin/hugegraph-loader.sh -g hugegraph -f example/file/struct.json -s example/file/schema.groovy
 6
 7# hugegraph-hubble
 8bin/start-hubble.sh
 9
10更多参考官网: https://hugegraph.apache.org/cn/docs/quickstart

注: 如果二进制包里面引入了第三方依赖, 则需要更新 LICENSE, 加入第三方依赖的 LICENSE; 若第三方依赖 LICENSE 是 Apache 2.0, 且对应的项目中包含了 NOTICE, 则还需要更新我们的 NOTICE 文件

5. 检查官网以及 github 等页面

  1. 确保官网至少满足 apache website check, 以及没有死链等
  2. 更新下载链接存在,以及版本更新说明页面更新
  3. …

邮件模板

检查完成后,你应该按不同角色回复邮件:(普通开发者 & PMC 成员)

1[] +1 approve
2
3[] +0 no opinion
4
5[] -1 disapprove with the reason
 1+1 (non-binding)
 2I checked:
 31. Download link/tag in mail are valid
 42. Checksum and GPG signatures are OK
 53. LICENSE & NOTICE exist
 64. Build successfully on XX OS version XXX
 75. No unexpected binary files
 86. Date is right in the NOTICE file
 97. Compile from source is fine under JavaX
108. No empty file & directory found
119. Test running xxx service OK
1210. ....

特别注意 PMC 成员必须使用 binding 标记回复邮件,这对于统计有效投票很重要;

 1+1 (binding)
 2I checked:
 31. Download link/tag in mail are valid
 42. Checksum and GPG signatures are OK
 53. LICENSE & NOTICE exist
 64. Build successfully on XX OS Version XX
 75. No unexpected binary files
 86. Date is right in the NOTICE file
 97. Compile from source is fine under JavaXX
108. No empty file & directory found
119. Test running XXX service OK
1210. ....

4 - 在 IDEA 中配置 Server 开发环境

适用范围:下述 IDEA 配置基于 HugeGraph 1.2.0 发布标签,仅作为历史调试步骤保留。当前主线的源码目录和验证入口见贡献流程与 Server 快速上手;不要从本页推断当前模块清单。

背景

在 快速上手 部分已经介绍了使用脚本启停 HugeGraph-Server 的流程。下面以 Linux 平台为例,介绍使用 IntelliJ IDEA 运行与调试 HugeGraph-Server 的流程。

本地启动的核心与脚本启动是一样的:

  1. 初始化数据库后端,执行 InitStore 类初始化图
  2. 启动 HugeGraph-Server,执行 HugeGraphServer 类加载初始化的图信息启动

在执行下述流程之前,请确保已经克隆了 HugeGraph 的源代码,并且已经配置了 Java 11 环境 & 可以参考这个 配置文档

1git clone https://github.com/apache/hugegraph.git

步骤

1. 配置文件拷贝

为了避免配置文件的更改影响 Git 的追踪,建议将所需的配置文件拷贝到一个单独的文件夹中:

1cp -r hugegraph-server/hugegraph-dist/src/assembly/static/scripts \
2      hugegraph-server/hugegraph-dist/src/assembly/static/conf \
3      path-to-your-directory

将 path-to-your-directory 替换为你创建的文件夹的路径。命令需在仓库根目录执行,hugegraph-dist 模块位于顶层的 hugegraph-server 目录之下。

下列 ToplingDB 步骤仅适用于历史定制构建。当前主线源码不包含 preload-topling.sh 或 ToplingDB 模块,按当前主线调试时跳过此说明。

2. InitStore 类初始化图

首先,需要在配置文件中配置数据库后端。以 RocksDB 为例,在 path-to-your-directory/conf/graphs/hugegraph.properties 文件中进行以下配置:

1backend=rocksdb
2serializer=binary
3rocksdb.data_path=.
4rocksdb.wal_path=.

然后,打开 IntelliJ IDEA 的 Run/Debug Configurations 面板,创建一个新的 Application 配置,按照以下步骤进行配置:

  • 在 Use classpath of module 中选择 hugegraph-dist
  • 将 Main class 设置为 org.apache.hugegraph.cmd.InitStore
  • 设置运行参数为 conf/rest-server.properties,这里的路径是相对于工作路径的,需要将工作路径设置为 path-to-your-directory
  • (可选,仅 ToplingDB 构建) ToplingDB 需要通过 LD_PRELOAD 机制预加载动态库,开发者需设置两个环境变量:LD_LIBRARY_PATH 指向 preload-topling.sh 解压出的 library 目录,LD_PRELOAD 设置为 libjemalloc.so:librocksdbjni-linux64.so,以确保相关库在运行时被正确加载
    • LD_LIBRARY_PATH=/path/to/your/library:$LD_LIBRARY_PATH
    • LD_PRELOAD=libjemalloc.so:librocksdbjni-linux64.so

若在 Java 11 环境下为 HugeGraph-Server 配置了用户认证 (authenticator),需要参考二进制包的脚本配置,添加下述 VM options:

1--add-exports=java.base/jdk.internal.reflect=ALL-UNNAMED

否则会报错:

1java.lang.reflect.InaccessibleObjectException: Unable to make public static synchronized void jdk.internal.reflect.Reflection.registerFieldsToFilter(java.lang.Class,java.lang.String[]) accessible: module java.base does not "exports jdk.internal.reflect" to unnamed module @xxx

配置完成后运行,如果运行成功,将会输出以下类似运行日志:

 12023-06-05 00:43:37 [main] [INFO] o.a.h.u.ConfigUtil - Scanning option 'graphs' directory './conf/graphs'
 22023-06-05 00:43:37 [main] [INFO] o.a.h.c.InitStore - Init graph with config file: ./conf/graphs/hugegraph.properties
 3......
 42023-06-05 00:43:39 [main] [INFO] o.a.h.b.s.r.RocksDBStore - Write down the backend version: 1.11
 52023-06-05 00:43:39 [main] [INFO] o.a.h.StandardHugeGraph - Graph 'hugegraph' has been initialized
 62023-06-05 00:43:39 [main] [INFO] o.a.h.StandardHugeGraph - Close graph standardhugegraph[hugegraph]
 72023-06-05 00:43:39 [db-open-1] [INFO] o.a.h.b.s.r.RocksDBStore - Opening RocksDB with data path: ./m
 82023-06-05 00:43:39 [db-open-1] [INFO] o.a.h.b.s.r.RocksDBStore - Opening RocksDB with data path: ./s
 92023-06-05 00:43:39 [db-open-1] [INFO] o.a.h.b.s.r.RocksDBStore - Opening RocksDB with data path: ./g
102023-06-05 00:43:39 [main] [INFO] o.a.h.HugeFactory - HugeFactory shutdown
112023-06-05 00:43:39 [hugegraph-shutdown] [INFO] o.a.h.HugeFactory - HugeGraph is shutting down

3. 运行 HugeGraphServer

类似地,打开 IntelliJ IDEA 的 Run/Debug Configurations 面板,创建一个新的 Application 配置,按照以下步骤进行配置:

  • 在 Use classpath of module 中选择 hugegraph-dist
  • 将 Main class 设置为 org.apache.hugegraph.dist.HugeGraphServer
  • 设置运行参数为 conf/gremlin-server.yaml conf/rest-server.properties,同样地,这里的路径是相对于工作路径的,需要将工作路径设置为 path-to-your-directory

二进制包中的 bin/hugegraph-server.sh 并不直接启动该类,而是启动 org.apache.hugegraph.bootstrap.HugeGraphServerBootstrap:它在两个配置文件路径之前多接收一个 true/false 的安全检查开关,为 true 时安装 HugeSecurityManager,随后再交给 HugeGraphServer。从 IDEA 直接运行 HugeGraphServer 会跳过这层包装,因此不会安装 security manager,这通常正是调试时想要的效果。

类似的,若在 Java 11 环境下为 HugeGraph-Server 配置了用户认证 (authenticator),同样需要参考二进制包的脚本配置,添加下述 VM options:

1--add-exports=java.base/jdk.internal.reflect=ALL-UNNAMED --add-modules=jdk.unsupported --add-exports=java.base/sun.nio.ch=ALL-UNNAMED

否则会报错:

1java.lang.reflect.InaccessibleObjectException: Unable to make public static synchronized void jdk.internal.reflect.Reflection.registerFieldsToFilter(java.lang.Class,java.lang.String[]) accessible: module java.base does not "exports jdk.internal.reflect" to unnamed module @xxx

配置完成后运行,如果看到以下类似日志,表示 HugeGraphServer 已经成功启动:

1......
22023-06-05 00:51:56 [gremlin-server-boss-1] [INFO] o.a.t.g.s.GremlinServer - Gremlin Server configured with worker thread pool of 1, gremlin pool of 8 and boss thread pool of 1.
32023-06-05 00:51:56 [gremlin-server-boss-1] [INFO] o.a.t.g.s.GremlinServer - Channel started at port 8182.

4. 调试 HugeGraphServer (可选)

在完成上述配置后,可以尝试对 HugeGraphServer 进行调试。在调试模式下运行 HugeGraphServer,并在以下位置设置断点:

1public String list(@Context GraphManager manager,
2                   @PathParam("graph") String graph, @QueryParam("label") String label,
3                   @QueryParam("properties") String properties, ......) {
4    // ignore log
5    Map<String, Object> props = parseProperties(properties);

然后,使用 RESTful API 请求 HugeGraphServer:

1curl "http://localhost:8080/graphspaces/DEFAULT/graphs/hugegraph/graph/vertices" | gunzip

此时,可以在调试器中查看详细的变量信息。

5. Log4j2 日志配置

默认情况下,运行 InitStore 和 HugeGraphServer 时,读取的 Log4j2 配置文件路径为 hugegraph-server/hugegraph-dist/src/main/resources/log4j2.xml,而不是 path-to-your-directory/conf/log4j2.xml,这个配置文件是使用脚本启动 HugeGraph-Server 时读取的。

为了避免同时维护两份配置文件,可以考虑在 IntelliJ IDEA 运行与调试 HugeGraph-Server 时,修改读取的 Log4j2 配置文件路径:

  1. 打开之前创建的 Application 配置
  2. 点击 Modify options - Add VM options
  3. 设置 VM options 为 -Dlog4j.configurationFile=conf/log4j2.xml

可能遇到的问题

1. java: package sun.misc does not exist

原因可能是在使用 Java 11 编译时触发了交叉编译,导致项目中使用的 sun.misc.Unsafe 找不到符号。有两种解决方案可供选择:

  1. 在 IntelliJ IDEA 的 Preferences/Settings 中找到 Java Compiler 面板,然后关闭 --release 选项 (推荐)
  2. 或者将项目的 SDK 版本设置为 8 (Deprecated soon)

2. java: *.store.raft.rpc.RaftRequests does not exist (RPC Generated Files)

原因是源代码没有包含 RPC-generated 文件。可以尝试两种方法来解决:

  1. [命令] 在根目录下运行 mvn clean compile -DskipTests (推荐)
  2. [UI] 在 IDEA 中,右键点击 hugegraph 模块,选择 Manve -> Generate Sources and Update Folders

3. Log4j2 日志无法打印 %l 等位置信息

这是因为 Log4j2 中使用了 asynchronous loggers,可以参考官方文档进行配置


参考
  1. HugeGraph-Server 快速上手
  2. hugegraph-server 本地调试文档 (Win/Unix)
  3. “package sun.misc does not exist” compilation error
  4. Cannot compile: java: package sun.misc does not exist
  5. The code-style config for HugeGraph in IDEA

5 - Apache HugeGraph Committer 指南

本文档概述了 Apache Committer 推选要求以及流程,对应的 ASF 官方文档可见:https://community.apache.org/newcommitter.html

候选人要求

  1. 候选人应遵守 Apache Code of Conduct
  2. PMC 成员将通过搜索邮件列表、issues、PRs、官网文档等方式,了解候选人如何与他人互动,以及他们所做的贡献
  3. 以下是在评估候选人是否适合成为 Committer 时需要考虑的一些要点:
    1. 与社区成员合作的能力
    2. 担任导师的能力
    3. 社区参与度
    4. 贡献程度
    5. 个人技能/能力

推选详细流程

讨论 (DISCUSS) → 投票 (VOTE) → 邀请 (INVITE) → 公告 (ANNOUNCE)

发起社区邮件讨论 (DISCUSS)

任何 HugeGraph 的 PMC 成员都可以发起投票讨论,在发现社区贡献者任何有价值的贡献并取得候选人本人同意后,可以在 private@hugegraph.apache.org 发起讨论。 讨论邮件里提议者要把候选人的贡献说清楚,并最好给出确认贡献的 URL 等信息,便于大家讨论分析。

下面是 HugeGraph 对应的邮件模板:(仅供参考)

Note: 后续将使用 xxx 指代候选人名,一般 xxx 为一个容易读的名字 (例如 Simon Jay)

ASF-INFRA 建议避免使用不易读的 ID 直接作为邮件人名代指 (例如避免 simon321 或 wh0isSim0n 😄)

另发送邮件最好选择 “纯文本” 模式,否则排版在 ASF Mail UI 中可能会乱

 1To: private@hugegraph.apache.org
 2Subject: [DISCUSS] XXX as a HugeGraph Committer Candidate
 3
 4Hi all:
 5
 6I am pleased to nominate xxx for the role of HugeGraph Committer based on his/her contributions over the past few months.
 7
 8[ Candidate's Contribution Summary ]
 9
10Here are the relevant PRs (issues) he/she has participated in:
11
12**Core Features:**
13- Feature 1: [ Reference Links ]
14- ...
15
16**Fix/Chore/Release:**
17
18**Doc:**
19
20[ Candidate's Current Notable Contributions ]
21
22His/Her contributions bring the following benefits to the community, helping us in the following ways:
23
24[ Candidate's Contributions and Benefits to the Community ]
25
26In view of the above contributions, I elect xxx as Committer of the HugeGraph project.
27
28[ Reference Links ]
291. PR1
302. PR2
313. ...
32
33Welcome everyone to share opinions~
34
35Thanks!

对于讨论邮件中贡献链接,可以使用 GitHub Search 的统计功能,按需输入如下对应关键词查询即可,可以在此基础上添加新的 repo 如 repo:apache/hugegraph-computer,特别注意调整时间范围 (下面是一个模板参考,请自行调整参数):

Mailing Lists 的参与则可使用 https://lists.apache.org/list?dev@hugegraph.apache.org:lte=10M:xxx 查询。

发起社区邮件投票 (VOTE)

如果讨论邮件在规定时间内没有收到分歧信息,投票发起者需要在 private@hugegraph.apache.org 发起对 Committer 的选举投票。

下面是对应的邮件模板:

 1To: private@hugegraph.apache.org
 2Subject: [VOTE] xxx as a HugeGraph Committer
 3
 4Hi all:
 5
 6Through the discussion of last week:
 7[ Discussion Mailing List Link ]
 8
 9We have discussed and listed what xxx participated in the HugeGraph community.
10I believe making him/her a Committer will enhance the work for HugeGraph. 
11
12So, I am happy to call VOTE to accept xxx as a HugeGraph Committer.
13 
14Voting will continue for at least 72 hours or until the required number of votes is reached.
15 
16Please vote accordingly:
17[ ] +1 approve
18[ ] +0 no opinion
19[ ] -1 disapprove with the reason  
20
21Thanks!

然后 PMC 成员回复 +1 或 -1 的邮件回复表达意见,一般来说至少需要 ≥3 票 +1 才能结束投票。

宣布投票结果 (RESULT)

投票邮件结束后,投票发起者需要邮件里提醒投票结束。同时,投票发起者需要发起邮件宣布投票结果,发送至 private@hugegraph.apache.org,邮件模板可参考:

 1To: private@hugegraph.apache.org
 2Subject: [RESULTS][VOTE] xxx as a HugeGraph Committer
 3
 4Hi all: The vote for "xxx" as a HugeGraph Committer has PASSED and closed now.
 5
 6The result is as follows: X PMC +1 Votes: 
 7- A (PMC ID)
 8- B
 9- C...
10
11Vote thread:
12put vote thread link here
13 
14Then I'm going to invite xxx to join us soon. Thanks for everyone's support!

向候选人发起邮件邀请 (INVITE)

宣布投票结果邮件发出后,投票发起人要给候选人发送邀请邮件。邀请邮件主送候选人,抄送 private@hugegraph.apache.org,被邀请的候选人必须通过指定的邮箱地址回复接受或者拒绝该邀请。

下面是对应可参考的邮件模板:

 1To: [ Candidate's Email ]
 2Cc: private@hugegraph.apache.org
 3Subject: Invitation to become HugeGraph committer: xxx
 4
 5Hello xxx,
 6
 7The HugeGraph Project Management Committee (PMC)
 8hereby offers you committer privileges to the project.
 9These privileges are offered on the understanding that you'll use them
10reasonably and with common sense. We like to work on trust
11rather than unnecessary constraints.
12
13Being a committer enables you to more easily make
14changes without needing to go through the patch
15submission process.
16
17Being a committer does not require you to
18participate any more than you already do. It does
19tend to make one even more committed.  You will
20probably find that you spend more time here.
21
22Of course, you can decline and instead remain as a
23contributor, participating as you do now.
24
25A. This personal invitation is a chance for you to
26accept or decline in private.  Either way, please
27let us know in reply to the private@hugegraph.apache.org
28address only.
29
30B. If you accept, the next step is to register an iCLA:
31    1. Details of the iCLA and the forms are found
32    through this link: https://www.apache.org/licenses/#clas
33
34    2. Instructions for its completion and return to
35    the Secretary of the ASF are found at
36    https://www.apache.org/licenses/#submitting
37
38    3. When you transmit the completed iCLA, request
39    to notify the Apache HugeGraph project and choose a
40    unique Apache ID. Look to see if your preferred
41    ID is already taken at
42    https://people.apache.org/committer-index.html
43    This will allow the Secretary to notify the PMC
44    when your iCLA has been recorded.
45
46When recording of your iCLA is noted, you will
47receive a follow-up message with the next steps for
48establishing you as a committer.
49
50With the expectation of your acceptance, welcome!
51
52The Apache HugeGraph PMC

候选人接受邀请 (ACCEPT)

候选人应回复上述邮件 (选择 reply all),表明接受邀请,邮件模板可参考:

 1To: [ Sender's Email ]
 2Cc: private@hugegraph.apache.org
 3Subject: Re: Invitation to become HugeGraph committer: xxx
 4
 5Hello Apache HugeGraph PMC,
 6
 7I accept the invitation.
 8
 9Thanks to the Apache HugeGraph Community for recognizing my work, I
10will continue to actively participate in the work of the Apache
11HugeGraph.
12
13Next, I will follow the instructions to complete the next steps:
14Signing and submitting iCLA and registering Apache ID.
15
16xxx

当然,候选人也可以选择拒绝邀请,这里就没有模板了:)

一旦邀请被接受,候选人需要完成以下事项:

ICLA 签署流程

  1. 下载 ICLA
  2. 打开 PDF 并填写相关内容,均需要全英文填写,建议使用 PDF 工具编辑并署名
    1. Full name: 名字在前,姓氏在后
    2. Public name: 可以不填,默认和 Full name 相同
    3. 勾选 check this box only if you enter names with your family name first
    4. Postal Address: 英文地址,从小地方到大地方的顺序来写,需详细到门牌号
    5. Country: 所在国家英文
    6. E-mail: 邮箱地址,建议与上述邮件中使用的邮箱相同
    7. (optional) preferred Apache id(s): 选择一个 Apache committer 页面不存在的 SVN ID
    8. (optional) notify project:Apache HugeGraph
    9. 签名:务必使用 PDF 工具手写
    10. Date: 格式 xxxx-xx-xx
  3. 签署完之后将 icla.pdf 重命名为 姓名拼音-icla.pdf
  4. 发送下述邮件,并附件引用 姓名拼音-icla.pdf
 1To: secretary@apache.org
 2Subject: ICLA Information
 3
 4Hello everyone:
 5
 6I have accepted the Apache HugeGraph PMC invitation to
 7become a HugeGraph committer, the attachment is my ICLA information.
 8
 9(Optional) My GitHub account is https://github.com/xxx. Thanks!
10
11xxx

更多注意事项可参考 https://github.com/apache/hugegraph/issues/1732

PMC 成员将等待 Apache secretary 团队确认 ICLA 备案,候选人和 PMC 成员将收到以下电子邮件:

1Dear xxx,
2
3This message acknowledges receipt of your ICLA, which has been filed in the Apache Software Foundation records.
4
5Your account (with id xxx) has been requested for you and you should receive email with next steps
6within the next few days (this process can take up to a week).
7
8Please refer to https://www.apache.org/foundation/how-it-works.html#developers
9for more information about roles at Apache.

设置 Apache 账号和开发环境 (CONFIG)

备案完成后,候选人将收到来自 root@apache.org 主题为 Welcome to the Apache Software Foundation 的邮件,此时需按照邮件中的步骤设置 Apache 账号和开发环境:

  1. 重置密码 https://id.apache.org/reset/enter
  2. 配置个人信息 https://whimsy.apache.org/roster/committer/xxx
  3. 关联 GitHub 账号 https://gitbox.apache.org/boxer
    1. 这一步需要配置 GitHub 双重身份验证 (2FA)
  4. 负责提名的 PMC 成员需通过 Roster 页面,将新的 Committer 添加到官方提交者列表中 (重要, 否则仓库权限不生效)
    1. 在这一步后,候选人即新的 Committer 才拥有对 GitHub HugeGraph 仓库的写权限
  5. (可选) 新的 Committer 可以使用 Apache 账号申请免费使用 Jetbrains 的全系列产品

发布公告邮件 (ANNOUNCE)

当候选人完成上述步骤后,候选人将正式成为 HugeGraph 的 Committer,此时需要向 dev@hugegraph.apache.org 发送公告邮件,邮件模板可参考:

 1To: dev@hugegraph.apache.org
 2Subject: [ANNOUNCE] New Committer: xxx
 3
 4Hi everyone, The PMC for Apache HugeGraph has invited xxx to
 5become a Committer and we are pleased to announce that he/she has accepted.
 6
 7xxx is being active in the HugeGraph community & dedicated to ... modules, 
 8and we are glad to see his/her more interactions with the community in the future.
 9
10(Optional) His/Her GitHub account is https://github.com/xxx
11
12Welcome xxx, and please enjoy your community journey~ 
13
14Thanks! 
15
16The Apache HugeGraph PMC

更新治理信息入口

Apache HugeGraph 已于 2026 年 1 月毕业,治理信息不再通过 Incubator clutch 页面维护,而是通过 ASF committee/project 数据维护。

请优先检查:

若信息未自动同步,请按照 ASF 官方流程联系 Apache Community Development 或 ASF Infra 协助处理。

参考

  1. https://community.apache.org/newcommitter.html (ASF 官方文档)
  2. https://infra.apache.org/new-committers-guide.html
  3. https://www.apache.org/dev/pmc.html#newcommitter
  4. https://linkis.apache.org/zh-CN/community/how-to-vote-a-committer-pmc
  5. https://www.apache.org/licenses/contributor-agreements.html#submitting
  6. https://www.apache.org/licenses/cla-faq.html#printer
  7. https://linkis.apache.org/zh-CN/community/how-to-sign-apache-icla
  8. https://github.com/apache/hugegraph/issues/1732 (HugeGraph ICLA related issue)