我需要從提供特定邏輯Java包的Java項目(例如com.example.functionality
)中找到jar,但其中有數百個,並且它們的名稱並不特別有用。確定Java包的位置
如何找到dirs/files/jar和packages/classes之間創建的映射?
我需要從提供特定邏輯Java包的Java項目(例如com.example.functionality
)中找到jar,但其中有數百個,並且它們的名稱並不特別有用。確定Java包的位置
如何找到dirs/files/jar和packages/classes之間創建的映射?
obj.getClass()getProtectionDomain()getCodeSource()
參見:javadoc
你想要一個'.getLocation()'。 – 2013-02-14 15:40:37
你可以做到這一點的代碼:
Class myClass = Class.forName("com.example.functionality"); // eg. /com/example/functionality.class String classfilePath = '/' + myClass.getName().replace(".", "/") + ".class"; URL location = myClass.getResource(classfilePath);
該URL將是JAR文件(或類文件夾,如果它不是在一個罐子裏)。 雖然略微哈克 - 可能無法適用於所有類加載器。
該URL將指向類文件,該文件將位於JAR或目錄中。不過,從那裏到實際目錄的網址並不難。 – 2013-02-14 15:31:50
對於一次性搜索,http://www.jarfinder.com/是很方便的。它具有令人印象深刻的索引,它似乎知道Maven Central以及Web上的許多其他下載站點的所有內容,並且可以通過類名搜索來查找哪些JAR包含該類。
據我所知,沒有明確的映射。在一般情況下,classloader會逐個查找類,逐個嘗試從每個類加載類,然後使用它找到的第一個類。類加載後,它會保存在內存中,而類加載器不再需要關心它的來源。 – millimoose 2013-02-14 15:23:59
您是否試圖在代碼中找到這個或運行時? – jtahlborn 2013-02-14 15:32:04
如果你使用的是IDE,那應該告訴你。如果沒有,我只是grep的jar文件的類名稱。類名稱被編碼爲文件名,並且文件名在jar文件中未壓縮。 – 2013-02-14 15:42:04