[英]How to make the java ServiceLoader work in a NetBeans 6.9 module application
[英]How to make Java serviceLoader of a external library work
我正在為第3方軟件開發一個插件,該插件尚未公開。 對於插件,我使用的是由maven管理的外部lib(.jar),稍后在雄貓服務器上執行。 在我更新到該庫的最新版本之前,一切工作都很好,該庫現在使用java.util.serviceLoader來加載接口的具體實現。 構建時,我的項目在tomcat服務器上具有以下包結構:
mypluginPackage.jar
|
---META-INF
---lib
|
--- theExternalLibUsingServiceLoader.jar
|
---META-INF
|
---services
|
--- full.path.to.TheFactoryInterface
---external.lib.path
|
--- TheFactoryInterface.class
--- TheConreteClass.class
--- mypluginCore.jar
|
---META-INF
--- my.plugin.path
|
--- MyClassUsingTheExternalLib.class
如您所見,外部庫具有正確的服務條目,這對於serviceLoader在META-INF中查找接口的具體內容是必需的。 full.path.to.TheFactoryInterface
文件的內容是full.path.to.TheConcreteClass
,這似乎是合法的。
我的插件(軟件包和內核)卻沒有任何這些META-INF信息。
現在發生的事情是,每當我的插件使用觸發外部庫的serviceLoader的方法時,serviceLoader都無法找到具體的實現。
我已經嘗試過將完全相同的services/full.path.to.TheFactoryInterface
到我所有的META-INF目錄中,這是行不通的(我想我需要更改full.path.to.TheFactoryInterface文件的內容但我不確定-由於第三方軟件的插件結構未記錄-正確的(相對)路徑是什么樣的)。
誰能給我一個鏡頭,我在這里做錯了什么以及如何解決它,以便serviceLoader找到具體的類? 服務文件夾及其內容應放置在哪個META-INF文件夾中,我應該更改路徑嗎? 那是根本的錯誤,還是我錯過了完全不同的東西?
我知道這是一個非常特殊的主題,因為第3方軟件尚不為人所知,但是依賴於ServiceLoader的任何信息以及在具有多個META-INF文件夾的多個jar上以及在不同的執行上下文/類路徑中運行時的行為,將不勝感激。
我可以通過擴展外部庫使它正常工作,因此我可以提供一個自定義的ClassLoader。 原來,默認的ClassLoader是錯誤的。
另外,我還能夠與第三方工具開發人員取得聯系並獲得所需的信息-稱之為“社交反編譯”。
現在一切正常。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.