取得目錄或JAR 中所有.class 檔案的類別物件
分析Java 應用程式時,載入和檢查類別變得至關重要動態地。面臨的常見挑戰是找到一種方法從專案位置掃描所有 .class 檔案(包括 JAR 或資料夾)並建立用於反射的 Class 物件。
URLClassloader 限制
許多解決方案都圍繞著 URLClassloader,允許開發人員從目錄或存檔載入特定的類別。然而,這些技術需要了解類別名稱或套件結構,這可能會受到限制。
解決方案:JarFile 掃描
提供的解決方案透過使用JarFile 掃描整個JAR 檔案:
JarFile jarFile = new JarFile(pathToJar); Enumeration<JarEntry> e = jarFile.entries();
它會忽略目錄和非.class 文件,並且對於每個有效的.class 文件:
String className = je.getName().substring(0,je.getName().length()-6); className = className.replace('/', '.'); Class c = cl.loadClass(className);
從JarEntry 提取className,並使用URLClassLoader 載入Class 物件。
Javassist Alternative
Javassist 提供了一種替代方法,透過從ClassPool:
ClassPool cp = ClassPool.getDefault(); CtClass ctClass = cp.get(className);
CtClass 提供對各種類別成員的訪問,例如方法、欄位和巢狀類別。
透過利用這些技術,開發人員可以動態載入和分析任何專案中的類別位置,使他們能夠提取有關 Java 應用程式的有價值的資訊。
以上是如何在 Java 中動態載入目錄或 JAR 檔案中的所有類別?的詳細內容。更多資訊請關注PHP中文網其他相關文章!