如何在JAR文件中获取类的名称?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (46)

我有一个JAR文件,我需要获取此JAR文件中所有类的名称。我怎样才能做到这一点?

我google了一下,看到了一些关于JarFile或Java的东西,ClassLoader但我不知道该怎么做。

提问于
用户回答回答于

选项(a):手动扫描JAR文件

在这个选项中,我们将填入classNames包含在jar文件中的所有Java类的列表/path/to/jar/file.jar

List<String> classNames = new ArrayList<String>();
ZipInputStream zip = new ZipInputStream(new FileInputStream("/path/to/jar/file.jar"));
for (ZipEntry entry = zip.getNextEntry(); entry != null; entry = zip.getNextEntry()) {
    if (!entry.isDirectory() && entry.getName().endsWith(".class")) {
        // This ZipEntry represents a class. Now, what class does it represent?
        String className = entry.getName().replace('/', '.'); // including ".class"
        classNames.add(className.substring(0, className.length() - ".class".length()));
    }
}

选项(b):使用专门的反射库

Guava

一件好事是ClassPath,它不会加载它找到的类,这在扫描大量类时非常重要。

ClassPath cp=ClassPath.from(Thread.currentThread().getContextClassLoader());
for(ClassPath.ClassInfo info : cp.getTopLevelClassesRecurusive("my.package.name")) {
    // Do stuff with classes here...
}

用户回答回答于

你可以使用Javajar工具。在txt文件中列出JAR文件的内容,你可以看到JAR中的所有类。

jar tvf jarfile.jar

扫码关注云+社区