我正在使用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
,在安装较新版本时不会被删除
我想避免在我的安装文件夹中堆积旧的捆绑版本。因此我的问题是:在安装新版本时卸载/删除这些旧版本的最佳方法是什么?
答案 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包。