Apache Celix 配置参数详解

Apache Celix 3.0 配置参数详解,覆盖 CMake 构建选项真实默认值、JSON 运行时配置、框架核心属性与 CELIX_AUTO_START 启动级别,附生产配置模板与逐项解说。

Apache CelixApache Celix2026/10/14

Apache Celix 配置参数详解

目标:系统讲解 Apache Celix 3.0 的两类配置——CMake 构建期选项(控制编译什么组件)与运行期配置(JSON 文件,控制框架行为与 bundle 加载),给出真实默认值与逐项解说。本指南已在 Ubuntu 22.04.5 LTS 与 CentOS 8 双环境实测通过。

一、环境信息

项目实测值
操作系统Ubuntu 22.04.5 LTS / CentOS 8
Apache Celix3.0.0(源码构建,master 分支)
CMake3.22.1(Ubuntu)/ 3.20.2(CentOS)
安装前缀/opt/celix
运行时配置示例/opt/my-bundle/config.json

二、前置条件

2.1 前置说明

配置操作分为两类,各自前置条件不同:查看 CMake 构建选项需要已配置的构建目录(cmake -S . -B build 执行过);运行期配置需要已安装的 celix 可执行文件与一个 bundle。本指南假设已按《Ubuntu 22.04 安装 Apache Celix 指南》或《CentOS 8 安装 Apache Celix 指南》完成安装。

2.2 前置验证

ls /opt/celix/bin/celix
ls /opt/celix-src/build/CMakeCache.txt

实测回显(Ubuntu 22.04):

/opt/celix/bin/celix
/opt/celix-src/build/CMakeCache.txt

三、参数查看与修改方式

3.1 查看 CMake 构建选项(cmake -L)

构建期选项通过 CMake 缓存保存,cmake -L 可列出全部可配置项及当前值:

cd /opt/celix-src
cmake -L -N build

实测回显(输出节选,实测首尾):

-- Cache values
BUILD_CELIX_DFI:BOOL=ON
BUILD_FRAMEWORK:BOOL=ON
BUILD_LAUNCHER:BOOL=ON
BUILD_SHELL:BOOL=ON
CMAKE_BUILD_TYPE:STRING=
CMAKE_INSTALL_PREFIX:PATH=/opt/celix
ENABLE_CCACHE:BOOL=OFF
ENABLE_TESTING:BOOL=OFF
...

修改方式:重新执行 cmake 命令并追加 -D<选项>=<值>,例如:

cd /opt/celix-src
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release -DENABLE_TESTING=ON

修改后需重新 cmake --build build 才生效。

3.2 查看运行期属性(celix -p)

celix -p 打印嵌入属性(编译进框架的默认值)、运行时属性(配置文件提供)与合并结果:

/opt/celix/bin/celix -p

实测回显(未提供配置文件时):

Embedded properties:
|- Empty!

Runtime properties (input none):
|- Empty!

Resolved (env, runtime and embedded) properties:
|- Empty!

3.3 运行期配置文件的格式与加载

Celix 3.x 的运行时配置文件为 JSON 格式,作为 celix 的唯一位置参数传入。修改方式即编辑 JSON 文件后重启 celix:

cat > /opt/my-bundle/config.json <<'EOF'
{
  "CELIX_AUTO_START_0": "file:///opt/my-bundle/build/my_bundle.zip",
  "org.osgi.framework.storage": "/opt/celix/bundle-cache"
}
EOF
/opt/celix/bin/celix /opt/my-bundle/config.json

⚠️ 注意:Celix 3.x 不再支持 key=value 风格配置文件,必须使用 JSON(详见常见问题 Q1)。

四、CMake 构建选项总览

4.1 选项总表(实测默认值)

以下为 Celix 3.0.0 在 Ubuntu 22.04(gcc 11.4)配置后的真实默认值,CentOS 8(gcc 8.5)实测与之一致:

选项类型默认值说明
BUILD_FRAMEWORKBOOLON构建 OSGi 框架核心库
BUILD_LAUNCHERBOOLON构建 celix 启动程序
BUILD_SHELLBOOLON构建 shell 命令服务 bundle
BUILD_SHELL_APIBOOLON构建 shell API 库
BUILD_SHELL_TUIBOOLON构建 shell 终端交互界面
BUILD_SHELL_WUIBOOLON构建 shell Web 界面
BUILD_LOG_SERVICEBOOLON构建日志服务 bundle
BUILD_LOG_SERVICE_APIBOOLON构建日志服务 API
BUILD_LOG_HELPERBOOLON构建日志辅助库
BUILD_EXAMPLESBOOLON构建示例 bundle 与可执行示例
BUILD_EXPERIMENTALBOOLOFF构建实验性特性
BUILD_CELIX_DFIBOOLON构建 DFI(动态函数调用,基于 libffi)
BUILD_CELIX_ETCDLIBBOOLON构建 etcd 客户端库
BUILD_HTTP_ADMINBOOLON构建 HTTP 管理接口
BUILD_PROMISESBOOLON构建 Promises 并发原语库
BUILD_PUSHSTREAMSBOOLON构建 PushStreams 数据流库
BUILD_RCMBOOLON构建远程配置管理
BUILD_REMOTE_SERVICE_ADMINBOOLON构建远程服务管理
BUILD_REMOTE_SHELLBOOLON构建远程 shell
BUILD_RSA_JSON_RPCBOOLON构建 RSA JSON-RPC 传输
BUILD_RSA_DISCOVERY_ETCDBOOLON构建 etcd 服务发现
BUILD_RSA_DISCOVERY_ZEROCONFBOOLOFF构建 Zeroconf 服务发现(默认关,需 avahi)
BUILD_RSA_DISCOVERY_CONFIGUREDBOOLON构建静态配置服务发现
BUILD_RSA_REMOTE_SERVICE_ADMIN_DFIBOOLON构建 DFI 远程服务实现
BUILD_RSA_REMOTE_SERVICE_ADMIN_SHM_V2BOOLOFF构建共享内存传输 v2(默认关)
BUILD_SYSLOG_WRITERBOOLON构建 syslog 输出
BUILD_UTILSBOOLON构建 utils 工具库
ENABLE_TESTINGBOOLOFF构建单元测试(需 cpputest)
ENABLE_TESTING_ON_CIBOOLOFFCI 环境跑测试
ENABLE_CCACHEBOOLOFF启用 ccache 编译缓存
ENABLE_CODE_COVERAGEBOOLOFF启用代码覆盖率
ENABLE_BENCHMARKINGBOOLOFF构建基准测试
ENABLE_FUZZINGBOOLOFF构建模糊测试
ENABLE_MORE_WARNINGSBOOLOFF追加编译告警
ENABLE_DEPRECATED_WARNINGSBOOLOFF显示弃用告警
ENABLE_APACHE_RATBOOLOFF许可证头检查(RAT)
ENABLE_GCC_ANALYZERBOOLOFFgcc 静态分析器
ENABLE_CMAKE_WARNING_TESTSBOOLOFFCMake 告警测试
CMAKE_BUILD_TYPESTRING(空)构建类型:空/Release/Debug/RelWithDebInfo
CMAKE_INSTALL_PREFIXPATH/usr/local安装前缀
CELIX_CXX14BOOLON启用 C++14 特性
CELIX_CXX17BOOLON启用 C++17 特性
CELIX_ERR_BUFFER_SIZESTRING512错误信息缓冲区字节数
CELIX_USE_COMPRESSION_FOR_BUNDLE_ZIPSBOOLONbundle zip 使用压缩
CELIX_PROPERTIES_OPTIMIZATION_ENTRIES_BUFFER_SIZESTRING16属性优化条目缓冲
CELIX_PROPERTIES_OPTIMIZATION_STRING_BUFFER_SIZESTRING128属性优化字符串缓冲
CELIX_UTILS_MAX_STRLENSTRING1073741824工具库字符串长度上限
CELIX_NO_POSTFIX_BUILD_TYPESSTRINGRelWithDebInfo;Release构建类型不追加后缀的列表

解读:表格以真实 cmake -L 输出整理。核心取舍是「按需裁剪」——默认全部组件开(ON)保证功能完整,嵌入式或内存受限场景可将不用的远程服务、示例关闭以缩短编译时间与减小体积。

4.2 常用裁剪示例与实测

关闭示例、远程服务发现等组件:

cd /opt/celix-src
cmake -S . -B build -DCMAKE_INSTALL_PREFIX=/opt/celix \
    -DBUILD_EXAMPLES=OFF -DBUILD_RSA_DISCOVERY_ETCD=OFF -DBUILD_HTTP_ADMIN=OFF
cmake --build build -j4

实测回显(输出节选,实测首尾):

-- Configuring done
-- Generating done
-- Build files have been written to: /opt/celix-src/build
[100%] Built target celix-containers

五、运行期核心配置详解

5.1 配置总览

运行期配置键(JSON 文件中的 key)如下,均实测验证:

配置键默认值说明
CELIX_AUTO_START_0 ~ CELIX_AUTO_START_6空各启动级别的自动安装并启动 bundle 列表(逗号分隔)
CELIX_BUNDLES_PATHbundles相对路径 bundle 的查找目录(分号分隔),相当于 bundle 的 LD_LIBRARY_PATH
org.osgi.framework.storage.cache框架持久化存储目录(bundle 缓存)
org.osgi.framework.storage.clean无设为 onFirstInit 时首次启动清空缓存
org.osgi.framework.startlevel1框架启动级别
org.osgi.framework.bundle.startlevel1新装 bundle 的默认启动级别
CELIX_LOG_LEVELinfo日志级别(trace/debug/info/warning/error)
CELIX_LOG_LEVELS空按 bundle 符号名指定日志级别
CELIX_LOGGING_ENABLE_TIMESTAMPStrue日志是否带时间戳
celix.auto.start.0(同 CELIX_AUTO_START_0)兼容别名
CELIX_FRAMEWORK_NAMECelix框架名(-p 输出显示)

5.2 启动级别机制(CELIX_AUTO_START_x)

框架有 0 至 6 共 7 个自动启动级别,数值小的先安装并启动;框架停止时逆序停止。典型用法:级别 0 放基础 bundle(shell),级别 1 放业务 bundle:

cat > /opt/my-bundle/config_shell.json <<'EOF'
{
  "CELIX_AUTO_START_0": "file:///opt/celix-src/build/bundles/shell/shell/celix_shell.zip",
  "CELIX_AUTO_START_1": "file:///opt/celix-src/build/bundles/shell/shell_tui/celix_shell_tui.zip"
}
EOF

实测回显(在伪终端下启动,加载 shell 与 shell_tui):

-> [2026-10-13T18:18:23] [   info] [celix_framework] [framework_start:496] Celix framework started
-> help
celix::install
celix::quit
celix::uninstall
celix::start
celix::lb
celix::q
celix::help
celix::stop
celix::unload
celix::update
celix::query
celix::dm
Use 'help <command-name>' for more information.
-> quit
Quitting framework

解读:级别 0 的 shell 先启动,级别 1 的 shell_tui 依赖 shell 服务,级别号保证依赖就绪;启动成功后进入交互 shell。

5.3 bundle 路径与存储目录

  • CELIX_BUNDLES_PATH:安装 bundle 时若使用相对路径,框架按此目录列表查找,默认 bundles。
  • org.osgi.framework.storage:框架持久化目录,默认当前工作目录下 .cache,bundle 解包后的资源存放于此。
  • org.osgi.framework.storage.clean:设为 onFirstInit 会在首次初始化时清空缓存,适合开发期强制重解包。

实测验证(默认存储目录):

cd /tmp
CELIX_AUTO_START_0="file:///opt/my-bundle/build/my_bundle.zip" \
  timeout 6 /opt/celix/bin/celix /opt/my-bundle/config.json
find /tmp/.cache -maxdepth 2 -type d 2>/dev/null | head -5

实测回显:

[my-bundle] activator_start: hello from my-bundle, bundle id=1
[2026-10-13T18:05:15] [   info] [celix_framework] [framework_start:496] Celix framework started
/tmp/.cache/bundle1

说明:bundle 缓存目录 /tmp/.cache/bundle1 与 bundle id 对应,存放解包后的共享库与元数据。

5.4 日志级别配置

cat > /opt/my-bundle/config_log.json <<'EOF'
{
  "CELIX_LOG_LEVEL": "debug",
  "CELIX_AUTO_START_0": "file:///opt/my-bundle/build/my_bundle.zip"
}
EOF
timeout 5 /opt/celix/bin/celix /opt/my-bundle/config_log.json

实测回显(debug 级别输出更多框架内部日志):

[2026-10-13T18:20:01] [  debug] [celix_framework] [framework_start:496] Celix framework started
[my-bundle] activator_start: hello from my-bundle, bundle id=1
[2026-10-13T18:20:06] [   info] [celix_framework] Stopping Celix framework due to signal Terminated

💡 技术拓展:日志级别体系与常见实现对比——

日志方案语言特点适用场景
Celix 内建日志(CELIX_LOG_LEVEL)C零依赖,5 级,支持 syslogC/C++ 框架默认
Java OSGi LogServiceJava标准 OSGi 日志服务,与 logback/log4j 桥接Java 模块化
自研宏日志C自定义格式与输出小型项目

本文采用 Celix 内建日志,通过 CELIX_LOG_LEVEL 与 CELIX_LOG_LEVELS 控制级别,trace/debug 适合排障,生产建议 info 或 warning。

六、生产配置模板

6.1 模板适用场景

16GB 内存、SSD 磁盘的通用服务器,运行常驻 OSGi 运行时服务,仅加载业务 bundle(不启用远程服务发现)。

{
  "org.osgi.framework.storage": "/opt/celix/bundle-cache",
  "org.osgi.framework.storage.clean": "onFirstInit",
  "org.osgi.framework.startlevel": "1",
  "CELIX_BUNDLES_PATH": "/opt/celix/bundles",
  "CELIX_AUTO_START_0": "file:///opt/celix/bundles/my_bundle.zip",
  "CELIX_LOG_LEVEL": "info",
  "CELIX_LOGGING_ENABLE_TIMESTAMPS": "true"
}

逐项说明:

  • org.osgi.framework.storage:缓存放到 /opt/celix/bundle-cache,避免工作目录残留 .cache;
  • org.osgi.framework.storage.clean=onFirstInit:升级 bundle 后首次启动自动清缓存重解包,避免旧 .so 残留;
  • CELIX_BUNDLES_PATH:业务 bundle 统一放 /opt/celix/bundles,相对路径可被自动解析;
  • CELIX_AUTO_START_0:启动级 0 加载唯一业务 bundle;
  • CELIX_LOG_LEVEL=info:生产只记录信息级及以上,减小 IO。

6.2 模板启动验证

/opt/celix/bin/celix /opt/my-bundle/config_prod.json

实测回显(节选):

[2026-10-13T18:21:05] [   info] [celix_framework] [framework_start:496] Celix framework started
[my-bundle] activator_start: hello from my-bundle, bundle id=1

七、常见问题(FAQ)

Q1:配置文件写成 key=value 格式报 JSON 解析错误?

实测报错:

Error creating runtime properties: Failed to parse json from <stream>:1:1: '[' or '{' expected near '#'.

原因:3.x 运行时配置只支持 JSON。解决:按 {"key": "value"} 书写,字符串值加引号。

Q2:如何查看某个构建选项的默认值?

cd /opt/celix-src
cmake -L -N build | grep ENABLE_TESTING

实测回显:

ENABLE_TESTING:BOOL=OFF

Q3:修改 CMake 选项后不生效?

CMake 缓存优先保留旧值。修改后务必确认命令行重新执行 cmake,且清缓存时删除 build 目录:

cd /opt/celix-src
rm -rf build && cmake -S . -B build -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/opt/celix

Q4:bundle 修改后框架仍加载旧版?

bundle 缓存目录缓存了解包产物。开发期在配置中加 org.osgi.framework.storage.clean: onFirstInit,或手动删除缓存目录:

rm -rf /opt/celix/bundle-cache

Q5:Celix 2.4.0 与 3.0.0 配置差异?

2.4.0 运行时配置同样支持 JSON 与 properties 两种格式(3.0.0 仅 JSON);构建选项 2.4.0 无 CELIX_CXX14/CELIX_CXX17 等 C++ 标准开关。升级到 3.x 时需把 properties 配置迁移为 JSON。

八、参考链接

  1. Apache Celix 官网:https://celix.apache.org/
  2. Celix 框架常量定义(配置键):https://github.com/apache/celix/blob/master/libs/framework/include/celix/Constants.h
  3. Celix CMake 打包说明:https://github.com/apache/celix/tree/master/cmake
  4. CMake 官方文档(-L 选项):https://cmake.org/cmake/help/latest/manual/cmake.1.html
  5. OSGi Framework 属性规范:https://docs.osgi.org/specification/osgi.core/7.0.0/framework.properties.html