如何在安装新版本时卸载旧的OSGI软件包版本?

时间:2014-09-26 16:18:59

标签: maven osgi cq5 sling

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

3 个答案:

答案 0 :(得分:2)

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

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

如果您想定期自动运行工具,可以注册一个OSGi EventHook来检测安装新软件包的时间,并在发生这种情况时触发清理运行。

很抱歉,如果这听起来有点复杂 - 但是剩下的捆绑文件也不会有问题。

答案 1 :(得分:1)

我通过在myproject-all模块中配置filter.xml来解决了这个问题(请参阅CQBlueprints description for the purpose of this module)以删除我的bundle install文件夹的内容。这样,在安装新捆绑包之前,始终会删除旧捆绑包。

要删除安装文件夹的内容,我将以下行添加到我的filter.xml文件中:

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

答案 2 :(得分:0)

使用curl命令删除特定的捆绑包版本。

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

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