2013-05-02 1 views
3

javassist를 사용하여 시스템 검색 경로에있는 기존 Java 클래스 목록을 찾는 방법이 있습니까? ".getDefault()"를 사용하여 시스템의 기본 검색 경로를 반환 할 수 있다는 것을 알고 있습니다. 클래스 이름을 모른 채이 검색 경로에 클래스를 나열하는 방법이 있습니까?javassist를 사용하여 프로젝트의 모든 클래스를 가져올 수 있습니까?

+0

클래스 패스의 모든 클래스에로드되는 모든 클래스를 저장할 수에 대한 에이전트/변압기를 연결하는 경우, 당신은 의미합니까? "사전에 클래스 이름을 지정하지 않고도"무엇입니까? – acdcjunior

+1

일반적으로 javassist를 사용하여 클래스 파일을 수정하려면 "pool.get ("class_name ");" 기본 JVM (Java 가상 머신)이 class_name.class 바이트 코드에 대해 기본적으로 갖는 동일한 경로를 검색합니다. 나는 하나의 클래스 (이 예제에서 "class_name.class")를 가져 가지 않고도 모든 클래스를 가져올 수 있는지 묻습니다. –

+0

이 요구 사항에 대한 해결책을 찾았습니까? – Panayotis

답변

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

이 메서드는 이미 기존 클래스가 아니라로드 된 클래스 만 기록한다고 생각합니다. 나는 오래된 "scan all jars"방법 만이 유일한 방법이라고 생각한다. – Panayotis

+0

이 메소드는 JVM으로로드 될 모든 클래스를 인터셉트합니다. 모든 클래스를 로그하지 않는다는 것을 의미합니다. 프로젝트에 클래스 (예 : JUnit 테스트)가로드되어 있지 않으면 로그에 나타나지 않습니다. – rakwaht

+0

빠른 Google 쿼리가 끝나면 기본적으로 문제는 내가 제안한 것과 동일한 방법으로 여기에서 물었다. https://zeroturnaround.com/rebellabs/how-to-inspect-classes-in-your-jvm/ – rakwaht

관련 문제