回答
可能不是最簡單的方法,但您可以查看該進程已打開的文件並從中確定。
如果您使用的是Windows,則可以使用Process Explorer查看該進程在任何給定時間打開的文件,或Process Monitor在運行時觀察文件系統訪問。會有很多噪音,但你可以從那裏弄清楚。
如果你在Mac上,我認爲內置的活動監視器可以給你一個打開的文件列表。可悲的是,我不知道你在Linux中使用的命令。
lsof -p PID - 將在Linux中列出針對特定進程的文件 – Cogsy 2009-06-04 13:43:37
用-verbose:class
參數調用java
可執行文件。這將產生象輸出:
[加載從文件org.apache.log4j.helpers.ThreadLocalMap:/ C:/.../ 1.2.14/log4j的-1.2.14.jar]
[加載從文件org.apache.commons.cli.Option:/ C:/.../公地-CLI-1.2.jar]
如果它爲每個加載的單個類輸出,則可能需要將其輸出爲grep:java -verbose:class ... | grep'callme.jar';應該減少噪音 – Herms 2009-06-04 13:43:57
嘗試這段代碼:
//Get the System Classloader
ClassLoader sysClassLoader = ClassLoader.getSystemClassLoader();
//Get the URLs
URL[] urls = ((URLClassLoader)sysClassLoader).getURLs();
System.out.println("CURRENT CLASSPATH :");
for(int i=0; i< urls.length; i++){
System.out.println(urls[i].getFile());
}
System.out.println("END OF CLASSPATH");
System.getProperty("java.class.path");
這個答案看似正確 - 因爲JVM(或者至少Sun的?)將從包含它的類路徑上的第一個位置加載類;按照類路徑的順序 – 2009-06-04 13:55:20
這隻有在您可以控制代碼時纔有效。這可能就是這種情況,但我不確定。 – Herms 2009-06-04 13:58:35
知道代碼是否來回並不那麼容易正在使用的JAR只有在你的代碼調用該jar被執行時纔是可能的。被覆蓋)。直到你的代碼沒有被覆蓋,很難知道你的應用程序類路徑上的jar是否被使用。
爲此,您可能需要正確的junit測試用例,它可以覆蓋整個代碼,然後您可以使用Class Dependency Analyzer工具。
這是一種嘗試看東西。您可以嘗試逐個刪除JAR並檢查應用程序是否有效,但junit案例是進行此檢查的最佳選擇。
你想從應用程序內部分析,還是從應用程序外部進行分析? – rich 2009-06-04 13:52:06
external.otherwise我可以檢查類路徑。 – omg 2009-06-04 16:58:45