जेडीके 5 में पेश की गई उपकरण सुविधाओं का उपयोग करने के लिए, आप -javaagent
ध्वज JVM को पास कर सकते हैं। यह स्थिर premain
विधि में इंस्ट्रुमेंटेशन क्लास का एक उदाहरण इंजेक्ट करेगा। इस तरह की एक कक्षा में उदाहरण के लिए:मैं एक्लिप्स आरसीपी एप्लिकेशन में java.lang.instrument का उपयोग कैसे कर सकता हूं?
public class MyClass {
public static Instrumentation inst;
public static void premain(String options, Instrumentation inst) {
MyClass.inst = inst;
}
}
एक उपयुक्त मैनिफ़ेस्ट फ़ाइल के साथ, आप इस इस प्रकार चला सकते हैं:
java -javaagent:myfiles.jar SomeClass
यह SomeClass
से premain विधि तो main
कहता है। जावा ऑब्जेक्ट के अनुमानित आकार पर अनुमान लगाने के लिए इस दृष्टिकोण का उपयोग Java.SizeOf Project में किया जाता है।
ठीक है, अब एक्लिप्स आरसीपी each bundle has its own classloader में। इसका मतलब है कि हमारे माइक्लास में संग्रहीत स्थिर इंस्ट्रूमेंटेशन ग्रहण अनुप्रयोग के लिए दृश्यमान नहीं है। जावागेंट एक वर्ग-लोडर का उपयोग करता है, ग्रहण बंडल दूसरे के साथ लोड हो जाता है। जब हम प्लगइन के भीतर से MyClass.inst
तक पहुंचते हैं तो यह null
है, के रूप में वर्ग एक ही वर्ग नहीं है जैसा कि जावावांट लोड होता है और premain
पर कॉल किया जाता है।
आरसीपी मेलिंग सूची पर संभावित समाधान के रूप में अन्य संकेत this thread हैं। लेकिन कुछ भी निर्णायक नहीं है।
क्या इस आसपास काम करने का कोई तरीका है? Eclipsezone आलेख में संकेतित Eclipse-BuddyPolicy
अच्छा लगता है। मैंने कोशिश की:
Eclipse-BuddyPolicy: app
भाग्य के बिना मेरे प्लगइन में। मुझे Eclipse-BuddyPolicy: javaagent
जैसे कुछ चाहिए। कोई विचार?
आप किसी भी दिखाई दे रहा है exeptions? एक पतन में पैकेज के बिना एजेंट वर्ग है। (यानी MyClass डिफ़ॉल्ट पैकेज में नहीं हो सकता है)। क्या यह ग्रहण के बाहर काम करता है? – stacker
हाँ, POJO सामान के साथ एक्लिप्स के बाहर ठीक काम करता है। वास्तव में, प्रीमियर में एक "println" ग्रहण से दिखाया जाता है, लेकिन तब किसी भी प्लगइन से बुलाए जाने पर स्थिर इंस्ट्रुमेंटेशन शून्य होता है। – richq