我有一個個人Eclipse RCP產品(com.example.product
),它基於一個個人功能(com.example.feature
),它由一個個人插件(com.example.plugin
)和Eclipse Helios(3.6)中的一些人組成。我希望應用程序檢查更新並根據需要從p2網站進行更新。我希望它是無頭的,即用戶不會在更新過程中進行交互,但可能會在對話框中看到進度。Eclipse RCP p2更新不起作用
我基於RCP Mail application上的更新我的實施。我改變了P2Util.checkForUpdates
方法有點包括一些記錄,以便我可以看到,如果有的話,會錯了:
static IStatus checkForUpdates(IProvisioningAgent agent,
IProgressMonitor monitor) throws OperationCanceledException,
InvocationTargetException {
ProvisioningSession session = new ProvisioningSession(agent);
UpdateOperation operation = new UpdateOperation(session);
SubMonitor sub = SubMonitor.convert(monitor,
"Checking for application updates...", 200);
IStatus status = operation.resolveModal(sub.newChild(100));
if (status.getCode() == UpdateOperation.STATUS_NOTHING_TO_UPDATE) {
return status;
}
if (status.getSeverity() == IStatus.CANCEL)
throw new OperationCanceledException();
if (status.getSeverity() != IStatus.ERROR) {
try {
logger.info("Status is " + status);
Update[] updates = operation.getPossibleUpdates();
for(Update u : updates){
logger.info("Update is " + u);
}
ProvisioningJob job = operation.getProvisioningJob(null);
if(job == null){
logger.error("Provisioning Job is null");
}
status = job.runModal(sub.newChild(100));
if (status.getSeverity() == IStatus.CANCEL) {
throw new OperationCanceledException();
}
} catch (Exception e){
logger.error("Exception while trying to get updates", e);
}
}
return status;
}
我有一個p2.inf
文件在我的功能在同一水平作爲我example.product
文件。它包含:
org.eclipse.equinox.p2.touchpoint.eclipse.addRepository":
instructions.configure=\
org.eclipse.equinox.p2.touchpoint.eclipse.addRepository(type:0,location:file${#58}/C${#58}/workspace/updatesite/);\
org.eclipse.equinox.p2.touchpoint.eclipse.addRepository(type:1,location:file${#58}/C${#58}/workspace/updatesite/);
我構建產品的插件,功能和產品ID設置爲1.0.0。 我可以使用產品導出嚮導從eclipse導出和運行我的產品。當我這樣做時,我打勾generate metadata repository
。
我使用Feature Manfiest Editor中的Create an Update Site Project
選項創建我的更新站點。我添加我的`com.example.feature'並構建它。只是爲了看看它是否有效,我嘗試通過eclipse IDE安裝新軟件選項瀏覽它,我可以在那裏看到這個功能。
我構建了更新站點,並將所有3個ID更改爲1.0.1。當我啓動應用程序時,它表示沒有安裝更新,日誌中沒有錯誤。
我不知道爲什麼它不從更新站點更新,但已越過我的腦海的事情是:
1)我可能需要在p2.inf文件的詳細信息,但我不確定是什麼,也許像命名空間,名稱和範圍,但我找不到一個好的實例。
2)在checkForUpdates
方法我可能需要做一些配置文件來更改正在更新的可安裝單元。再一次,我只發現了一些暗示這一點的評論,而不是任何示例代碼。
任何提示或想法都在這裏非常感謝,這是吃了很多時間。
@ user473284感謝您的幫助,當您說剛公佈該功能將無法正常工作時,我該如何發佈該產品。您的意思是使用導出產品時生成的存儲庫,而不是從功能清單編輯器創建更新站點? – Alb 2010-10-12 15:06:26
@ user473284嗨,我已經建立了一個本地網絡服務器,並有我的p2.inf和現在指向該功能的更新網址。我試着添加你的代碼,但是我沒有getUpdate(profile,provisioningContext,engine,context)的實現;或知道這些論點來自哪裏?這是來自另一個例子什麼的? – Alb 2010-10-12 15:52:16