java - ग्रहण में एनोटेशन प्रोसेसर डिबग करना




eclipse ant remote-debugging annotation-processing (3)

मैं एक साधारण एनोटेशन प्रोसेसर लिख रहा हूं और इसे ग्रहण के द्वारा डिबग करने की कोशिश कर रहा हूं। मैंने एनोटेशन प्रोसेसर के लिए एक नया प्रोजेक्ट बनाया है और जेवाक्स। एनोटेशन। प्रोसेसिंग को कॉन्फ़िगर किया है। आवश्यकता के अनुसार मेटा-आईएनएफ के तहत प्रोसेसर और यह एनाटेशन को ठीक करता है।

फिर, मैंने कुछ और कोड जोड़ दिए और डीबगिंग करने की कोशिश की, लेकिन एनोटेशन प्रोसेसर में जोड़े गए ब्रेकपॉइंट पर एक्ज़्यूशन स्टॉप कभी नहीं कर सके। मैं चींटी का उपयोग कर संकलित कर रहा हूं और मैं निम्नलिखित एएनटी विकल्प का उपयोग कर रहा हूं।

निर्यात ANT_OPTS = "- Xdebug -Xrunjdwp: transport = dt_socket, सर्वर = y, निलंबित = y, पता = 8000"

चींटी निर्माण को ट्रिगर करने के बाद, मैं एक दूरस्थ डीबग कॉन्फ़िगरेशन बना रहा हूं और डीबगर ठीक शुरू होता है। चींटी का निर्माण भी सफलतापूर्वक शुरू होता है लेकिन एनोटेशन प्रोसेसर में जोड़े गए किसी भी ब्रेक पॉइंट पर निष्पादन कभी भी बंद नहीं होता है।


Answers

यह एक ऐसी समस्या है जो मैं बस गया था, और ग्रहण प्लगइन समाधान मेरे लिए बेहद बोझल लगता है मुझे संकलन प्रक्रिया को लागू करने के लिए javax.tools.JavaCompiler का उपयोग करके एक सरल समाधान मिला। नीचे दिए गए कोड का उपयोग करना, आप राइट-क्लिक करें> डीबग कर सकते हैं> एक्वायप्से में जेयूनेट टेस्ट और आप से सीधे एनोटेशन प्रोसेसर डीबग कर सकते हैं

   @Test
   public void runAnnoationProcessor() throws Exception {
      String source = "my.project/src";

      Iterable<JavaFileObject> files = getSourceFiles(source);

      JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();

      CompilationTask task = compiler.getTask(new PrintWriter(System.out), null, null, null, null, files);
      task.setProcessors(Arrays.asList(new MyAnnotationProcessorClass()));

      task.call();
   }

   private Iterable<JavaFileObject> getSourceFiles(String p_path) throws Exception {
     JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
     StandardJavaFileManager files = compiler.getStandardFileManager(null, null, null);

     files.setLocation(StandardLocation.SOURCE_PATH, Arrays.asList(new File(p_path)));

     Set<Kind> fileKinds = Collections.singleton(Kind.SOURCE);
     return files.list(StandardLocation.SOURCE_PATH, "", fileKinds, true);
   }

सबसे आसान तरीका है एक ग्रहण प्लगइन बनाना और फिर इसे ग्रहण से सीधे डिबग करना है यह बहुत कठिन है तो यह है - यह है: https://www.youtube.com/watch?v=PjUaHkUsgzo यूट्यूब में एक 7 मिनट की मार्गदर्शिका है जो आपको आरंभ कर सकता है।


@SafeVarargs इसे होने से नहीं रोकता है, हालांकि यह अनिवार्य है कि संकलक उस कोड को संकलित करते समय कठोर है।

http://docs.oracle.com/javase/7/docs/api/java/lang/SafeVarargs.html इसे भविष्य में विस्तार से बताता है।

ढेर प्रदूषण तब होता है जब आप एक सामान्य इंटरफ़ेस पर ऑपरेशन करते समय ClassCastException प्राप्त करते हैं और इसमें घोषित की तुलना में एक और प्रकार होता है।







java eclipse ant remote-debugging annotation-processing