2011-10-07 11 views
5
public byte[] transform(ClassLoader loader, String className, Class<?> clazz, 
      ProtectionDomain domain, byte[] bytes) 
    throws IllegalClassFormatException { 
     return inspectClass(className, clazz, bytes); 
} 

private byte[] inspectClass(String name, Class<?> clazz, byte[] b) { 
     System.out.println("here"); //OK I see this print 
     ClassPool pool = ClassPool.getDefault(); 
     System.out.println("inclass"); //can't see it !! 
} 

Co może się zdarzyć w ClassPool.getDefault();?ClassPool.getDefault(); nie robi nic w Javassist

+0

Czy widzisz jakiś wyjątek? –

+0

@ThomasUhrig nie :(bardzo dziwne Stanie się szalony - kiedy wyjmę printLn widzę wyjątek ... – JohnJohnGa

Odpowiedz

6

Miałem ten sam problem i znalazłem ClassPool.getDefault nie rzuca wyjątek, ale Throwable. W rzeczywistości był to throw java.lang.NoClassDefFoundError. W moim manifeście, miałem:

Premain-Class: timing.TimingTransform 
Boot-Class-Path: lib/javassist.jar 

Prawdopodobnie wystarczy wskazać Boot-Class-Path do pliku javassist.jar. W moim przypadku, ze ścieżką klasy Boot powyżej, potrzebowałem katalogu lib z plikiem javassist.jar.

Pomyłka Zrobiłem początkowo było wprowadzenie javassist.jar wewnątrz pliku jar środek (poniższe nie jest prawidłowe, w celach demonstracyjnych only):

 0 Mon Oct 24 16:58:14 MST 2011 META-INF/ 
    146 Mon Oct 24 16:58:14 MST 2011 META-INF/MANIFEST.MF 
    0 Thu Oct 20 14:58:06 MST 2011 timing/ 
    2482 Mon Oct 24 16:58:06 MST 2011 timing/TimingStats.class 
    8360 Mon Oct 24 16:58:06 MST 2011 timing/TimingTransform.class 
    0 Tue Oct 18 17:28:24 MST 2011 lib/ 
645252 Fri Jul 08 18:24:58 MST 2011 lib/javassist.jar 

zamiast oddanie javassist.jar wewnątrz pliku jar agenta , Umieściłem go w zewnętrznym katalogu dostępnym dla programu. Po tej zmianie wszystko działało dobrze.

+0

Dodanie opcji boot-class-path nadal daje mi ten sam błąd. Dodanie tej '-Xbootclasspath/a: javassist -3.20.0-GA.jar 'podczas wykonywania słoika rozwiązał problem dla mnie. – codeln

Powiązane problemy