2011-10-07 7 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 !! 
} 

ClassPool.getDefault(); में क्या हो सकता है?ClassPool.getDefault(); Javassist

+0

क्या आप कोई अपवाद देख रहे हैं? –

+0

@ थॉमस उरीग नो :(बहुत अजीब मैं पागल हो जाऊंगा - जब मैं प्रिंट एलएन हटाता हूं तो मैं अपवाद देख सकता हूं ... – JohnJohnGa

उत्तर

6

मुझे एक ही समस्या थी, और क्लासपूल.getDefault अपवाद फेंक नहीं रहा था, लेकिन थ्रोबल। असल में, यह java.lang फेंक रहा था। NoClassDefFoundError। मेरी प्रकट में, मैं था:

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

आप की संभावना सिर्फ javassist.jar फाइल करने के लिए बूट-क्लास-पथ इंगित करने के लिए की जरूरत है। मेरे मामले में, ऊपर बूट-क्लास-पथ के साथ, मुझे इसमें javassist.jar के साथ एक lib निर्देशिका की आवश्यकता थी।

गलती मैं शुरू में किए गए एजेंट जार फ़ाइल अंदर javassist.jar डाल दिया गया था (निम्नलिखित गलत है, प्रदर्शन प्रयोजनों के लिए):

 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 

बजाय एजेंट जार फ़ाइल के अंदर javassist.jar डाल , मैंने इसे प्रोग्राम के लिए सुलभ बाहरी निर्देशिका में रखा है। उस बदलाव के बाद, यह ठीक काम किया।

+0

बूट-क्लास-पथ विकल्प जोड़ना अभी भी मुझे एक ही त्रुटि देता है। यह '-Xbootclasspath/a: javassist जोड़ना -3.20.0-GA.jar 'जार को निष्पादित करते समय मेरे लिए समस्या हल हो गई। – codeln

संबंधित मुद्दे