在一個項目中,我需要在特定的目錄下加載不同的jar
文件。然後我將搜索.class
文件,這些文件實現了特定的interface
。當我發現搜索一個,我需要加載它與Class.forName()
。有沒有簡單的方法來做到這一點?你能提出一些示例代碼嗎?jar中的列表和加載類
回答
如果您在一個普通的Java應用程序中並且想要定義接口< - > Implementation(s)映射,我也喜歡Mark的方法。
做你想做的事情的另一種方法我認爲是修補類路徑掃描,你考慮當前正在運行的類路徑並使用它通過註釋或接口查找組件。
這方面的流行示例例如Spring。
要在Spring以外使用,你可以嘗試使用一些庫,如Reflections或Class-Search,它們提供了一個在類路徑中搜索的API。
由於我最近用Vaadin/GWT和他們的方法來找到當前類路徑中的某些東西,this class從他們的工具可能對你很有趣,如果你想手動實現類似的東西。
但是就像Martijn已經提到的那樣,這些解決方案需要將JAR添加到類路徑中,以便類加載並解析找到的組件。
如果這很關鍵,你不能先加載並解釋它,那麼你可以嘗試在類庫之上構建一些東西,比如ASM,它可能會提供對.class
文件的解釋而不加載類。
我敢肯定,你不能檢查類是否實現了一個特定的接口,而無需首先加載它。所以,我認爲你必須加載每個班級文件或嘗試解決你的問題/以不同的方式實現你的目標。
您可以嘗試讀取.class文件二進制文件,並在字節代碼中找到它實現的接口,但不要問我該怎麼做。 :)
看看ServiceLoader。這確實要求這些類的實現者在/META-INF/services/<fqn-of-interface>
中提供一個描述性文件,其中列出了該接口的jar提供的所有實現類。
它似乎可以補救我的問題。我會谷歌一些示例代碼。謝謝。 – cacert 2012-04-15 10:12:46
- 1. 在其中創建Jar和加載類
- 2. Jar在jar中類加載和方法執行
- 3. jar-in-jar類加載問題
- 4. 加載類的列表
- 5. 如何從Jar加載類?
- 6. 從幾個jar中的單個jar中加載一個類
- 7. NoClassDefFoundError:Tomcat 7無法從jar中加載類
- 8. 從jar中動態加載類
- 9. 無法在jar文件中加載類
- 10. 在Jar文件中加載類
- 11. 動態加載和jar
- 12. 在C#中提取JAR類的列表#
- 13. 無法加載jar文件的主類
- 14. 沒有類文件的WebLogic加載jar?
- 15. 在Sitecore中加載類列表
- 16. 如何編寫自定義的類加載器來從jar中加載類?
- 17. Tomcat jar加載
- 18. WordPress的類別列表jQuery的加載()
- 19. Java重載類來加載項目類而不是Jar類
- 20. 如何爲類加載器加載任意選擇的JAR?
- 21. 如何防止jar-in-jar-loader加載特定的類?
- 22. 基於安全策略限制動態加載的類和jar
- 23. 在運行時加載jar和使用它的類
- 24. jruby無法從jar加載java類
- 25. Xamarin綁定jar無法加載類
- 26. Java:更新jar文件時加載類
- 27. 如何從jar或目錄加載類
- 28. 自定義類從jar加載ClassCastException
- 29. JAX-RS - 從jar文件加載@Provider類
- 30. Ant jar找不到或加載主類
是的,你是對的。我的實際問題是找到完整的類名(帶有包),因爲Class.forName()期待全名。事先我不知道jar中的類名。 – cacert 2012-04-15 09:58:03