使用Java構建插件系統的最佳方法


Answers

使用OSGi

它是Eclipse插件系統的基礎。 Equinox是Eclipse的實現(授權EPL), Felix是Apache Project的實現(授權的Apache Public License)。

Eclipse提供了一個具體的例子,OSGi可以覆蓋您提到的要點(或者如果您需要完整的Eclipse / SWT / JFace堆棧,您可以在Eclipse RCP之上構建應用程序)。

Question

你將如何為你的Java應用程序實現一個插件系統?

是否可以有一個易於使用(開發人員)的系統,它可以實現以下功能:

  • 用戶將他們的插件放入應用程序的子目錄中
  • 該插件可以提供配置屏幕
  • 如果您使用框架,許可證是否與商業開發兼容?



幾年前,我開始了這樣一個項目,我希望很快就會做好準備。我受到了NetBeans和Eclipse等項目的啟發,但同時它也改變了一些不同之處。 OSGi現在看起來是個不錯的選擇,但我沒有機會將其與我的項目進行比較。它與上面提到的JPF類似,但同時在很多方面有所不同。

激發我的基本思想是盡可能簡單地構建Java應用程序,而不需要將Web應用程序,桌面應用程序或Applet / JWS應用程序(當然這還不包括UI)分離為核心功能。

我在腦海中建立了幾個目標的項目:

  • 如果你構建一個Web應用程序或桌面應用程序,你應該以相同的方式啟動應用程序,一個簡單的main方法,沒有花哨的web.xml聲明(並不是說我反對有一個標準的Web描述符,它不適合於一個插件系統,在那裡添加“servlets” - 我將它們稱為RequestHandler(s) - 根據您的意願動態調整)。
  • 很容易在“擴展點”周圍插入“擴展” - 這是Eclipse的一些東西,但採用了不同的方法。
  • 可自行部署的,因為所有的插件都是註冊的(XML文件),應用程序必須獨立於構建系統而自行部署 - 當然還有一個Ant任務和一個Maven MOJO,它們與這個世界的鏈接,但在結束它調用應用程序並指示它在特定位置自行部署。
  • 從Maven借用,它可以從存儲庫(包括Maven 1和2存儲庫)下載代碼,這樣只要您有權訪問存儲庫(您可以在某個時候使用該應用程序,並且基本上可以支持自動存儲庫)更新 - 你不喜歡這個想法,通知你的web應用程序有一個更新的版本,它被下載,它只需要你的許可來安裝它?我知道我喜歡這個)。
  • 有關係統運行狀況的基本應用程序監控,出現故障時的電子郵件通知



我認為推薦OSGi解決上述問題是非常糟糕的建議。 OSGi是“正確的選擇”,但對於上述場景,我認為JPF或者一些自製的簡約框架就足夠了。







Related