2013-05-02 90 views
3

有没有办法使用javassist在系统搜索路径中查找现有java类的列表?我知道你可以使用“.getDefault()”来返回系统的默认搜索路径,有没有一种方法可以在不知道类名的情况下列出这个搜索路径上的类。你可以使用javassist抓取项目中的所有类吗?

+0

在类路径中的所有类的类,你是什么意思?什么是“不必事先指定类名”? – acdcjunior 2013-05-02 01:22:19

+1

通常要用javassist修改一个类文件,可以声明“pool.get(”class_name“);”它搜索与底层JVM(Java虚拟机)默认具有的class_name.class字节码相同的路径。我问是否有可能抓住所有类而不抓住一个类(本例中的“class_name.class”) – 2013-05-02 01:42:17

+0

您是否找到了解决此需求的解决方案? – Panayotis 2017-08-06 08:03:06

回答

0

如果安装一个代理/变压器项目,你可以轻松登录或以某种方式保存所有被加载到你的项目

public class Agent { 

    public static void premain(String agentArgs, Instrumentation inst) { 
     inst.addTransformer(new ClassFileTransformer() { 
      @Override 
      public byte[] transform(ClassLoader classLoader, String s, 
            Class<?> aClass, ProtectionDomain protectionDomain, 
            byte[] bytes) throws IllegalClassFormatException { 
       // here you will see all the classes that are loaded into your project 
       // So just log its full name 
       System.out.println(s); 
      }  
    } 
} 
+0

我认为这种方法只记录已加载的类,而不是所有现有的类。我相信只有一个可以使用的古老的“扫描所有罐子”方法。 – Panayotis 2017-08-29 14:03:35

+0

该方法拦截将要加载到JVM中的所有类。我没有记录所有的类,这意味着如果你的项目中有你的项目中的类(例如JUnit测试)未加载,将不会出现在日志上 – rakwaht 2017-08-29 14:05:52

+0

只是在快速的谷歌查询后,我发现这基本上解决了问题在这里用我提出的同样的方法问到https://zeroturnaround.com/rebellabs/how-to-inspect-classes-in-your-jvm/ – rakwaht 2017-08-29 14:08:56

相关问题