2012-07-12 104 views
1

我在項目中實現此邏輯時遇到問題。我使用ServiceLoader,我不知道或者甚至可能,但我想動態地添加JAR到一些已知的應用程序目錄,因此應用程序可以在啓動時加載它們。我所做的唯一的事情就是我知道如何創建可擴展的ONE JAR(帶有META-INF/services),所以我可以在這個JAR中添加越來越多的提供者和類(實現)。 JAR包含在類路徑中,就像普通的庫一樣,所以應用程序知道它。我想要實現的: 我不想擴展一個jar文件,但我想通過添加更多jar文件(比如提供者(服務)的插件來擴展應用程序,但我不知道如何。Java SPI - ServiceLoader - 將多個JAR添加到APP類路徑

感謝您的幫助!

回答

4

您只需要(a)使用這些目錄中所有JAR文件的URL構建的URLClassLoader,並(b)調用ServiceLoader.load(Class service, ClassLoader loader)

+0

太棒了!謝謝!猜測動態加載JAR的唯一方法是通過該URLClassLoader。無論如何,它運作良好。我沒有意識到,ServiceLoader.load()方法被第二個參數 - ClassLoader重載...我知道我錯過了一些東西! – Slimer 2012-07-12 20:46:37

0

我想你可能會創建一個你的客戶ClassLoader。 ClassLoader將以動態模式從jar中裝載類。許多框架都有一些非常類似你想要的功能。你可以看看它們中的一些代碼。 jetty中的WebAppClassLoader類可能是一個起點!

+0

不需要。您根本不需要自定義類加載器。 – EJP 2012-07-12 10:09:30