2012-10-05 69 views
5

我們擁有一個eclipse功能,該功能已獲得許可,許可證由我們自己的代碼處理。用戶可以進入我們的更新站點並升級他的功能。我們面臨的問題是在用戶許可證需要更新之前,他可以使用新的升級。如何在安裝前驗證升級

我想要做的是根據用戶許可證驗證功能版本,並警告用戶在安裝之前需要更新其許可證。

我想我會使用自定義的eclipse p2 touchPoint動作validateLicense來做到這一點。

例子:

我的代碼是所謂的,在這裏我驗證對用戶的許可證版本。如果失敗,我會警告用戶,然後他可以取消安裝。

所以我的第一個問題是:

  • 我能得到這個權利,或者是一些其他的方式來做到這一點?

我的第二個問題是非常基本的:

  • 我在哪裏可以告訴Eclipse運行我的代碼? 我看了here at eclipse help他們在那裏解釋它是什麼。但我不明白在哪裏放置信息來運行我的代碼?它在feature.xml中。

最後:

  • 是否有一個例子,如何創建和使用P2 touchPonts?

回答

1

我實施了一個自定義操作,如圖所示here,我有一個似乎工作的系統。我忽略了「接觸點」擴展,因爲在我的情況下它是不必要的,但其餘部分是相同的。

我的操作在我的功能(instructions.install)的安裝階段執行,但也許配置階段也可以工作。收集階段沒有工作。

該操作在安裝過程中執行,下載完成後執行。理想情況下,它會在下載之前,但對我來說這不是一個大問題。從操作中返回錯誤狀態會取消安裝。它會留下一些下載的文件,但它們不會被激活,並可能在稍後被p2的垃圾收集器刪除。

我還設法做了一些更有趣的事情。我的動作插件在我的主插件上有一個依賴項(可選和非貪婪)。因此,安裝是這樣的:在執行

  • 操作插件下載
  • 自定義操作
  • 動作檢測我的主要插件是否已安裝,如果是,它調用了進去檢索許可信息。主插件必須公開一個API來執行操作。該操作還會檢查主插件的版本以檢測API是否存在。
  • 該操作現在可以決定是繼續還是取消安裝。它甚至可以使用Display#syncExec與用戶交互(這是checkTrust階段的代碼所做的,所以我認爲它是安全的)。如果需要,該操作還可以檢測安裝是否無頭。

的一些陷阱:

  • 行動本身必須進行版本控制。這是您在plugin.xml和p2.inf文件中聲明的版本,它與插件版本不同。我只是用我插件的相同版本替換1.0.0。通過這種方式,動作插件的最新版本總是在執行之前下載。這很好,因爲現在任何問題更改許可規則都可以在動作插件中實現。
  • 操作API在Eclipse 3.5和3.6之間更改。無論如何,我可能會放棄對3.5的支持。
  • Actions plugin可能應該簽名。對我來說就是這樣。該系統對我來說似乎太強大了,因爲只需將Eclipse指向更新站點即可執行下載的代碼。

我仍然需要測試它如何與不同版本的Eclipse和其他IDE一起工作。我在3.6中看到一個奇怪的(非阻塞)錯誤。然而結果是有希望的,看起來這個系統可能實際上工作。

+0

這真的太棒了!謝謝 – giZm0

1

接觸點在安裝時執行,這意味着解析(驗證)已經發生。我不確定他們會幫忙。如何創建代表用戶安裝許可證的可安裝單元(IU)(或Eclipse Feature)。然後你會將產品的依賴關係放在該許可證上。

例如,創建一個名爲com.mycompany.license(1.0.0)的IU。您將創建另一個名爲com.mycompany.license(2.0.0)。安裝許可證時,相應的IU將添加到配置文件中。

現在,當您去安裝產品時,產品的新版本需要許可證版本2.0.0。如果未安裝此許可證,解決方案將失敗。

這是否有意義?你認爲這會有幫助嗎?

+0

這是一個有趣的想法,但這將使我可以運行代碼?無論它是在安裝之前還是之後發生,都只是在安裝時發生。這是關於這個你知道的地方的一些很好的文檔嗎? – giZm0

+0

你爲什麼要運行代碼?如果你需要運行任意代碼,那麼是的,你需要一個接觸點。但是接觸點不會導致安裝失敗(嗯,我想你可以拋出異常並嘗試將所有內容都回滾,但這不是他們的工作)。如果您想驗證許可證是否真的正確,我會在運行時執行此操作(而不是安裝時間),並使用IU技巧確保用戶不會處於無效狀態。至於文檔,這裏有一點http://wiki.eclipse.org/Equinox/p2/Customizing_Metadata。 – irbull

+0

驗證需要運行一些代碼才能驗證。即檢查服務器或在某些情況下只檢查「密鑰庫」。在檢查過程中引發異常或僅返回false的想法,就像我錯過了依賴關係一樣,這是我想做的。但我無法讓它工作。我會仔細看看IU,但乍一看似乎並沒有真正幫助我。謝謝你! – giZm0