如何在安装新版本时卸载旧的OSGIbundle版本



我正在使用Adobe CQ的CQ蓝图maven原型将OSGi捆绑包部署到CQ5.6.中。这个原型使用Maven Sling插件来部署捆绑包,方法是将它们复制到我的内容存储库的安装目录中
每次构建时,我都会使用maven版本插件更改捆绑包的版本号。因此,在每次部署时,都会安装一个具有新文件名的bundle jar,如commons-services-1.0.30.jar。我的问题是,目前较旧的捆绑包版本,如commons-services-1.0.29.jar,在安装新版本时不会被删除
我希望避免旧的捆绑版本堆积在我的安装文件夹中。因此,我的问题是:在安装新版本时,卸载/删除这些旧版本的最佳方法是什么?

捆绑包堆积在安装文件夹中并不是真正的问题-它们只会占用空间,但CQ用来检测和安装捆绑包的Apache Sling OSGI安装程序会忽略它们。安装程序只考虑捆绑包的最新版本(基于其OSGi版本头),而忽略旧版本。

如果你真的想删除旧的捆绑文件,最好的办法可能是创建一个小工具,通过遍历安装它们的JCR树(我认为是/apps)来找到它们,并删除除最新版本外的所有文件。如果捆绑包文件名始终包含版本号,您可能只需使用正确的比较器对其名称进行排序,然后删除除最后一个之外的所有名称。如果你想真正强大,你需要阅读捆绑包元数据来了解它的版本号。

如果你想定期自动运行你的工具,你可以注册一个OSGi EventHook来检测何时安装了新的捆绑包,并在安装时触发清理运行。

如果这听起来有点复杂,很抱歉,但剩余的捆绑文件并没有真正的问题。

我通过在myproject-all模块中配置filter.xml(请参阅本模块的CQBlueprint描述)来删除捆绑包安装文件夹的内容,从而解决了这个问题。这样,在安装新的捆绑包之前,总是会删除旧的捆绑包。

为了删除安装文件夹的内容,我在filter.xml文件中添加了以下行:

<filter root="/apps/myapp/install">

使用curl命令删除特定的bundle版本。

curl -u admin:admin -daction=uninstall http://localhost:4505/system/console/bundles/"name of bundle"

编辑:删除了清除,因为这不适用于osgi捆绑包。

最新更新