2015-02-07 64 views
0

我目前正在開發一個服務器軟件的API,以便用戶可以通過編程插件來擴展我的軟件,而不是自己修改軟件,並允許其他沒有編程知識的用戶輕易更改該軟件通過添加這些插件。到目前爲止,一切工作正常。但是,我遇到了配置問題。如何獲取jar類來自

你看,每個插件有存儲與這4個屬性的plugin.yml文件: 主:主類是這裏 名稱存儲:這是插件名稱存儲 版本:這是插件版本被存儲在 作者:這是插件作者存儲的地方

現在,爲了讓插件打印一些東西給控制檯,他們使用一個名爲this.getServer()。getLogger()。info(「 MESSAGE);(他們擴展插件的另一個類,這就是爲什麼他們使用「this」而不是另一個類來記錄)

但是,我做n對於如何獲得哪個插件是在調用函數時有任何想法。我有一個PluginSession的ArrayList,事件處理程序用它循環來運行事件函數。

我的解決方案是從中調用一個類的jar,所以我可以從那裏獲取plugin.yml。但是,我不知道如何得到這個,我嘗試過使用Class.forName();和其他一些代碼。但是因爲這個類在運行代碼的jar/project中是不存在的,所以它會拋出一個ClassNotFoundException異常。

有沒有人在這裏知道如何從不使用Class.forName()的類從哪個jar中獲取?謝謝!對於-Trent

回答

1

看一看Class.getResource。如果您調用MyClass.getResource(「plugin.yml」)(或帶有前導斜槓的「/plugin.yml」,我忘記了),則會返回指向plugin.yml文件的文件URL,它與我的課。 (或者如果路徑錯誤或者jar不包含「plugin.yml」文件,則爲null)。然後可以打開一個InputStream到該資源。在插件框架中,您可能需要使用myPluginInstance.getClass().getResource

+1

非常感謝!現在我終於可以在我的插件會話類之外獲得插件信息! :d – Whirvis 2015-02-08 18:59:36

0

假設罐子「PluginSessions」類路徑通過Eclipse在你已經添加,那麼你可以試試下面的技巧 - 它

  1. 選擇/高亮PluginSessions通過雙擊
  2. 現在按CTRL + SHIFT + T
  3. 命名對話框開放型出現了。在這裏你可以找到類的來源。如果您有超過一個包含PluginSessions類的廣告瓶比您擁有它們的列表更多。

要從此CTRL + SHIFT + T招你需要的項目中添加所有的罐子需要受益於您的classpath添加。

+0

這不是我想要的答案。我說我想要能夠獲得一個類正在調用的jar(一個插件)通過代碼,所以我可以得到插件。yml從jar中獲取它的名字。 – Whirvis 2015-02-07 21:39:34