2012-11-12 52 views
0

我繼承了一個旨在成爲多代理開發平臺的Java項目。這個想法是,你可以創建在平臺上運行的「應用程序」。我正在尋找一種方法來分發基礎平臺,以便最終用戶可以將應用程序(可能打包成jar包)添加到預定義的文件夾中,將引用存儲到該平臺讀取的某個清單文件中,因此可以從中訪問文件。使用清單文件在運行時加載jar

我看着下面的答案,但這些似乎需要,該平臺代碼知道類在設計時的名字:

理想情況下,我想要以下結構工作:

  • 主目錄:platform.jar,apps.manifest,應用程序(目錄)
  • 應用程序/應用1/app1.jar,應用程序/應用2/app2.jar,...,應用程序/ APPN/appN.jar

apps.manifest將包含每個應用程序的條目,其中將包括jar的路徑以及作爲主應用程序(實現通用接口)對象的類的名稱。

在我platform.jar主要的代碼,我想讀的清單,發現有N個應用,並能夠撥打ApplicationOne appOne = new ApplicationOne(this)其中ApplicationOneapp1.jar的主要應用對象的名稱和this是來自platform.jar的對象的引用,其中持有對應用程序的引用。

如果所有的罐子(platform.jar和應用程序罐子)都在用戶的類路徑中,它是否會像上面那樣工作?如果是這樣,是否有辦法臨時添加一個目錄(和所有子目錄)到Java中的用戶類路徑,當我運行platform.jar時,我可以運行該目錄?我暫時問,因爲封閉的文件夾應該可以在文件系統上移動。

關於這個問題的任何意見,以及任何關於改善問題的建議,使它更清晰,更易於閱讀。

由於

+0

如果你可以在你的「應用」註釋,這可能幫助:http://stackoverflow.com/questions/259140/scanning-java-annotations-at-runtime/3391773#3391773 – Friso

回答

1

聽起來就像是ServiceLoader API可以是使用的。

服務是一組衆所周知的接口和(通常是抽象的) 類。服務提供者是服務的具體實現。 提供程序中的類通常實現接口,並且該服務本身定義的類子類是 。服務提供商 可以以擴展的形式 安裝在Java平臺的實現中,也就是將jar文件放入任何常用的 擴展目錄中。

this blog entry關於它的用法

+0

看起來絕對(完美)謝謝。 – ataulm