2014-09-26 457 views
2

我使用Adobe CQ的CQ Blueprints maven archetype在CQ5.6.1中部署OSGi軟件包。該原型使用Maven Sling Plugin通過將它們複製到我的內容存儲庫的安裝目錄中來部署這些包。
我正在使用maven版本插件更改每個版本的捆綁版本號。因此,每次部署時,都會安裝一個具有新文件名的捆綁包,如commons-services-1.0.30.jar。我的問題是,當前舊版軟件包版本(如commons-services-1.0.29.jar)在安裝較新版本時不會被刪除。
我想避免舊的捆綁版本在我的安裝文件夾中堆積。因此,我的問題是:在安裝新版本時卸載/刪除這些較舊版本的最佳方法是什麼?如何在安裝新版本後卸載舊的OSGI捆綁軟件版本?

回答

1

我通過我的myproject,所有模塊在配置filter.xml(見CQBlueprints description for the purpose of this module)刪除我的包的內容安裝文件夾解決了這個問題。這樣,在安裝新捆綁軟件之前總是刪除舊捆綁軟件。

要刪除我的安裝文件夾的內容,添加以下行到我的filter.xml文件:

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

使用curl命令刪除特定的捆綁軟件版本。

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

編輯:刪除清除,因爲這不適用於osgi包。

+0

我不認爲這個問題有什麼與JCR VersionManager,它是關於OSGi捆綁版本,而不是JCR節點版本。 – 2014-09-29 09:31:53

+0

@BertrandDelacretaz其實我在想這個包將作爲jcr節點安裝,所以我們可以使用清除來清除,但我無法獲得版本號,所以第二部分不工作。我們可以做的是創建一個新的調度程序,我們可以安排在特定時間間隔後運行。在此調度程序中,我們將從安裝文件夾中刪除舊節點,並使用pattermather保留所有包的最新版本,或者使用split功能從版本號中提取數字值。 – amitdeol 2014-09-29 10:13:43

+0

任何方式捲曲部分工作正常我們可以使用捲曲刪除舊版本 – amitdeol 2014-09-29 10:14:22

2

捆綁在一個安裝文件夾堆砌是不是一個真正的問題 - 他們將只使用空間,但它們是由CQ用來檢測和安裝包Apache的吊索安裝OSGI忽略。安裝程序僅考慮軟件包的最新版本(基於其OSGi版本標頭),並忽略舊版本。

如果你真的想刪除舊的包文件,最好的辦法可能是創建一個小工具,它可以通過遍歷安裝它們的JCR樹(我假設的/ apps)來找到它們,並刪除除最新版本以外的所有文件。如果軟件包文件名一致地包含版本號,則可以使用正確的比較器對其名稱進行排序,並刪除除最後一個之外的所有文件名。如果你想要非常強大,你需要閱讀包的元數據來了解它的版本號。

如果您希望這種情況發生時,你可以註冊一個OSGi EventHook安裝了新的包時,發現定期自動運行您的工具,並引發了清理運行。

對不起,如果這聽起來有點複雜 - 但再次捆綁文件沒有真正的問題。

+0

非常感謝你爲您的詳細答案。我希望有一個更直接的方式來刪除舊版本,但我認爲你的建議是可靠的。您對Apache Sling OSGI安裝程序選擇基於OSGi版本頭的最新版本的評論使我認爲,如果捆綁包的文件名不包含版本號,也可以解決問題,但我不確定是否存在可以使用Maven Bundle插件將其保留在OSGi標頭中,​​從文件名中刪除版本號。 – raro 2014-10-01 01:56:31

+0

你說得對,爲所有版本使用相同的文件名將解決清除問題,但在替換文件時可能會出現暫時性問題,我不確定安裝程序是否乾淨地處理該文件。如果你想玩文件名,最好的辦法可能是使用交替的文件名(bundleA,bundleB,然後回到A),所以你只有一個剩餘的,沒有瞬態問題。 – 2014-10-01 06:08:06

+0

在我們的開發版本中,我們不會更改捆綁的文件名。它們始終包含相同的(x.x.x-SNAPSHOT)版本號。到目前爲止,我們沒有任何問題,所以我猜安裝程序能夠處理這種情況。 – raro 2014-10-01 14:02:41

相關問題