为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

小怪兽爱吃肉 2019-08-02 14:14:17
如何在运行时从文件夹或JAR加载类?我正在尝试创建一个Java工具,它将扫描Java应用程序的结构并提供一些有意义的信息。为此,我需要能够从项目位置(JAR / WAR或只是一个文件夹)扫描所有.class文件,并使用反射来阅读他们的方法。事实证明这几乎是不可能的。我可以找到许多基于URLClassloader的解决方案,它允许我从目录/存档加载特定的类,但没有一个允许我加载类而没有关于类名或包结构的任何信息。编辑:我想我的说法很差。我的问题不是我无法获得所有的类文件,我可以通过递归等来做到这一点并正确定位它们。我的问题是为每个类文件获取一个Class对象。
查看完整描述

3 回答

?
湖上湖

TA贡献2003条经验 获得超2个赞

列出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;}


查看完整回答
反对 回复 2019-08-02
  • 3 回答
  • 0 关注
  • 487 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信