如何在运行时从文件夹或JAR加载类?

如何在运行时从文件夹或JAR加载类?

我正在尝试创建一个Java工具,它将扫描Java应用程序的结构并提供一些有意义的信息。为此,我需要能够从项目位置(JAR / WAR或只是一个文件夹)扫描所有.class文件,并使用反射来阅读他们的方法。事实证明这几乎是不可能的。

我可以找到许多基于URLClassloader的解决方案,它允许我从目录/存档加载特定的类,但没有一个允许我加载类而没有关于类名或包结构的任何信息。

编辑:我想我的说法很差。我的问题不是我无法获得所有的类文件,我可以通过递归等来做到这一点并正确定位它们。我的问题是为每个类文件获取一个Class对象。


小怪兽爱吃肉
浏览 493回答 3
3回答

湖上湖

列出jar文件中的所有类。public static List getClasseNames(String jarName) {     ArrayList classes = new ArrayList();     if (debug)         System.out.println("Jar " + jarName );     try {         JarInputStream jarFile = new JarInputStream(new FileInputStream(                 jarName));         JarEntry jarEntry;         while (true) {             jarEntry = jarFile.getNextJarEntry();             if (jarEntry == null) {                 break;             }             if (jarEntry.getName().endsWith(".class")) {                 if (debug)                     System.out.println("Found "                             + jarEntry.getName().replaceAll("/", "\\."));                 classes.add(jarEntry.getName().replaceAll("/", "\\."));             }         }     } catch (Exception e) {         e.printStackTrace();     }     return classes;}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java