以编程方式列出jar中的所有公共类

时间:2016-03-01 16:32:09

标签: java

我有一个jar文件,我可以列出jar中的所有类。 jar中的类可以是public,protected或package scope。我想知道是否有可能告诉范围并且只列出公共类?

2 个答案:

答案 0 :(得分:1)

你可以这样做,我能想到的不仅仅是一种方法,这里有两种:

  • 您可以使用字节码操作工具来读取.class文件并获取修改器。缺点是你需要一个额外的库。好处是这种方式非常安全,因为您不需要将类加载到VM中,只需加载到内存中,因此不会执行代码,并且.jar类依赖于不可用的类,这种方式仍然有效。

  • 您可以对此ClassLoader使用.jar并加载每个类,然后使用Reflection进行检查。好处是你不需要任何第三方库。缺点是,为了检查类,它们需要由ClassLoader加载,这意味着将执行这些类的代码(静态初始化程序)。如果这是不受信任的第三方代码,您将首先安装SecurityManager来沙箱这些类。另一个缺点是,如果这些类依赖于其他不可用的类(例如通过扩展此类不可用的类),则此方法将失败。

  • 您可以使用javap工具检查课程。

答案 1 :(得分:0)

如果您已经在jar中列出了类,则可以使用Reflection接口按名称(String)获取这些类的Class对象,然后使用Class接口来确定类的属性,例如isPublic,isFinal,或isStatic。

快速搜索显示:

http://tutorials.jenkov.com/java-reflection/classes.html#modifiers