Apache Aries 常用 CLI 命令与工具详解
Apache Aries 常用 CLI 命令详解:Gogo shell 帮助体系、bundle 生命周期、查询诊断、文件脚本与服务上下文命令,基于 Felix 7.0.5 与 Aries Blueprint 1.10.3 实测回显。
Apache Aries 常用 CLI 命令与工具详解
目标:掌握 Aries 运行环境(Felix 7.0.5 + Gogo shell)的常用命令行工具:bundle 生命周期管理、状态与服务查询、装配诊断、脚本化操作,全部命令回显来自真实运行。
一、Gogo Shell 概览
1.1 启动进入 Shell
cd /opt/felix
java -jar bin/felix.jar
真实回显:
[Blueprint Extender: 1] INFO org.apache.aries.blueprint.container.BlueprintContainerImpl - Blueprint bundle org.apache.aries.blueprint.core/1.10.3 has been started
Welcome to Apache Felix Gogo
g!
g! 为 Gogo shell 提示符,在此输入命令。命令解析采用作用域限定:felix:lb 与 lb 等价,同名命令可用冒号前缀区分。
💡 技术拓展:不同 OSGi 运行时的 shell 命令不同——Felix 使用 Gogo(felix:* 与 gogo:* 命令组);Apache Karaf 在 Gogo 基础上扩展了 feature:list、bundle:list 等子命令体系;Eclipse Equinox 使用 OSGi 控制台(osgi> 提示符)。Aries 组件本身的部署与验证命令以 Felix/Gogo 为例展开。
1.2 查看全部命令
g! help
真实回显(按作用域分组):
context:addbundlelistener
context:addframeworklistener
context:addservicelistener
context:allservicereferences
context:bundle
context:bundles
context:createfilter
context:datafile
context:getallservicereferences
context:getbundle
context:getbundles
context:getdatafile
context:getproperty
context:getservice
context:getserviceobjects
context:getservicereference
context:getservicereferences
context:installbundle
context:property
context:registerservice
context:removebundlelistener
context:removeframeworklistener
context:removeservicelistener
context:service
context:serviceobjects
context:servicereference
context:servicereferences
context:ungetservice
felix:bundlelevel
felix:cd
felix:frameworklevel
felix:headers
felix:help
felix:inspect
felix:install
felix:lb
felix:log
felix:ls
felix:refresh
felix:resolve
felix:start
felix:stop
felix:uninstall
felix:update
felix:which
gogo:bg
gogo:break
gogo:cat
gogo:cd
gogo:clear
gogo:complete
gogo:continue
gogo:date
gogo:each
gogo:echo
gogo:fg
gogo:format
gogo:getopt
gogo:gosh
gogo:grep
gogo:head
gogo:help
gogo:history
gogo:if
gogo:jobs
gogo:keymap
gogo:less
gogo:ls
gogo:nano
gogo:new
gogo:not
gogo:pwd
gogo:set
gogo:setopt
gogo:sh
gogo:sleep
gogo:sort
二、bundle 生命周期命令
2.1 安装(install)
g! install file:/opt/aries-src/demo/target/aries-blueprint-demo-1.0.0.jar
Bundle ID: 17
install 接受 file: 与 http: 形式的 URL,返回分配的 Bundle ID。
2.2 启动(start)
g! start 17
[Blueprint Extender: 2] INFO org.apache.aries.blueprint.container.BlueprintContainerImpl - Blueprint bundle com.example.aries.blueprint.demo/1.0.0 has been started
start 按 ID 启动 bundle,Aries 扩展器随之创建 Blueprint 运行时。注意:start 参数不接受 symbolic name,实测传入名称会报错:
g! start com.example.aries.blueprint.demo
java.net.MalformedURLException: no protocol: com.example.aries.blueprint.demo
2.3 停止(stop)
g! stop 17
停止后 bundle 回到 Resolved 状态,Blueprint 运行时同步销毁;再次 start 可重建运行时(日志显示新运行时已创建)。
2.4 卸载(uninstall)
g! uninstall 19
[pipe-uninstall 19] INFO org.apache.aries.blueprint.container.BlueprintExtender - Destroying container for blueprint bundle com.example.aries.blueprint.consumer/1.0.0
卸载即从运行时移除 bundle,Aries 先销毁其 Blueprint 运行时再移除服务。
2.5 更新(update)与刷新(refresh)
g! update 17
g! refresh 17
update 重新读取 jar 内容并重装;refresh 对指定 bundle 及其依赖重新解析。两者常用于热更新场景。
三、查询与诊断命令
3.1 列出 bundle(lb)
g! lb
START LEVEL 1
ID|State |Level|Name
0|Active | 0|System Bundle (7.0.5)|7.0.5
17|Active | 1|aries-blueprint-demo (1.0.0)|1.0.0
19|Active | 1|aries-blueprint-consumer (1.0.0)|1.0.0
各列含义:ID 为 Bundle ID;State 为生命周期状态(Installed、Resolved、Active);Level 为启动级别;Name 显示 Bundle-Name。
3.2 查看 symbolic name(lb -s)
g! lb -s
17|Installed | 1|com.example.aries.blueprint.demo (1.0.0)|1.0.0
-s 选项将 Name 列切换为 Bundle-SymbolicName,用于核对安装来源。
3.3 查看 MANIFEST(headers)
g! headers 17
aries-blueprint-demo (17)
-------------------------
Bnd-LastModified = 1791909072012
Build-Jdk-Spec = 17
Bundle-Blueprint = OSGI-INF/blueprint/demo.xml
Bundle-ManifestVersion = 2
Bundle-Name = aries-blueprint-demo
Bundle-SymbolicName = com.example.aries.blueprint.demo
Bundle-Version = 1.0.0
Created-By = Apache Maven Bundle Plugin 5.1.9
Export-Package = com.example.aries.api;version="1.0.0",com.example.aries.impl;version="1.0.0";uses:="com.example.aries.api"
Export-Service = com.example.aries.api.Greeting;osgi.service.blueprint.compname=greetingBean
Import-Package = com.example.aries.api;version="[1.0,2)",java.lang,java.lang.invoke,org.osgi.service.blueprint;version="[1.0.0,2.0.0)"
Manifest-Version = 1.0
Require-Capability = osgi.ee;filter:="(&(osgi.ee=JavaSE)(version=17))"
Tool = Bnd-6.3.1.202206071316
Bundle-Blueprint 与 Export-Service 是 Aries 装配诊断的关键项。
3.4 检查服务能力(inspect cap service)
g! inspect cap service 17
com.example.aries.blueprint.demo [17] provides:
-----------------------------------------------
service; com.example.aries.api.Greeting with properties:
osgi.service.blueprint.compname = greetingBean
service.bundleid = 17
service.id = 33
service.scope = bundle
Used by:
com.example.aries.blueprint.consumer [19]
service; org.osgi.service.blueprint.container.BlueprintContainer with properties:
osgi.blueprint.container.symbolicname = com.example.aries.blueprint.demo
osgi.blueprint.container.version = 1.0.0
service.bundleid = 17
service.id = 34
service.scope = singleton
Used by 列出正在使用该服务的其他 bundle,是验证服务装配闭环的直接证据。
3.5 检查包依赖(inspect req package)
g! inspect req package 19
com.example.aries.blueprint.consumer [19] requires:
---------------------------------------------------
package [EMPTY]
列出 bundle 对包的导入需求,依赖由框架自动满足时显示解析成功。
3.6 定位导出方(which)
g! which com.example.aries.api
which 用于查询某个包由哪个 bundle 导出,快速定位类来源。
四、文件与脚本命令
4.1 文件浏览
g! ls
g! cat config.properties
g! pwd
ls 与 cat 类似 shell 同名命令,作用于 felix.home 目录;pwd 显示当前目录。
4.2 脚本化
Gogo 支持变量、管道与分支:
g! echo 1 + 2
3
g! gogo:echo Hello | gogo:grep Hello
Hello
g! if { gogo:echo ok } { gogo:echo branch }
常用组合:sleep 控制节奏、date 查看时间、each 遍历、sort 排序,可把重复操作写成脚本一次执行。
4.3 运行脚本(gosh)
g! gosh file:/opt/scripts/deploy.gogo
gosh 执行脚本文件,内容为逐行命令,适合固定的部署与验证流程。
五、服务与上下文命令
5.1 服务查询
g! context:servicereferences com.example.aries.api.Greeting
| 命令 | 说明 |
|---|---|
| context:servicereferences | 列出指定接口的服务引用 |
| context:serviceobjects | 列出服务实现对象 |
| context:getservice | 获取服务实例 |
| context:allservicereferences | 列出全部服务引用 |
| context:registerservice | 注册服务 |
5.2 上下文与框架属性
g! context:property org.osgi.framework.version
| 命令 | 说明 |
|---|---|
| context:property | 读取框架属性 |
| context:bundles | 列出全部 bundle 对象 |
| context:createfilter | 创建并测试 LDAP 过滤器 |
六、日志与启动级别命令
6.1 查看框架日志(felix:log)
g! felix:log
输出框架日志缓冲,Aries 扩展器的运行时创建与销毁记录均可在此复核。
6.2 启动级别管理
g! felix:frameworklevel
g! felix:bundlelevel 17
frameworklevel 显示/设置框架启动级别,bundlelevel 查看单个 bundle 级别。批量部署时可用级别控制启动顺序。
6.3 关闭运行时
g! stop
[FelixShutdown] INFO org.apache.aries.blueprint.container.BlueprintExtender - Destroying container for blueprint bundle com.example.aries.blueprint.consumer/1.0.0
[FelixShutdown] INFO org.apache.aries.blueprint.container.BlueprintExtender - Destroying container for blueprint bundle com.example.aries.blueprint.demo/1.0.0
[FelixShutdown] INFO org.apache.aries.blueprint.container.BlueprintExtender - Destroying container for blueprint bundle org.apache.aries.blueprint.core/1.10.3
g! gosh: stopping framework
不带参数的 stop 关闭整个框架,Aries 按反序销毁全部 Blueprint 运行时。
七、参考链接
- Apache Felix Gogo 文档:https://felix.apache.org/documentation/subprojects/apache-felix-gogo.html
- Apache Aries 官方网站:https://aries.apache.org/
- Aries Blueprint 模块说明:https://aries.apache.org/modules/blueprint.html
- OSGi 规范文档:https://osgi.org/specification/
- Apache Karaf 命令参考:https://karaf.apache.org/manual/latest/commands/