2008-09-04 10 views
53

मैं javadocs उत्पन्न करने के लिए चींटी का उपयोग कर रहा हूं, लेकिन इस अपवाद को और अधिक प्राप्त करें - क्यों?javadocs उत्पन्न करते समय मुझे क्लासकास्ट अपवाद क्यों मिल रहा है?

मैं जेडीके संस्करण 1.6.0_06 का उपयोग कर रहा हूं।

[javadoc] java.lang.ClassCastException: com.sun.tools.javadoc.ClassDocImpl cannot be cast to com.sun.javadoc.AnnotationTypeDoc 
    [javadoc]  at com.sun.tools.javadoc.AnnotationDescImpl.annotationType(AnnotationDescImpl.java:46) 
    [javadoc]  at com.sun.tools.doclets.formats.html.HtmlDocletWriter.getAnnotations(HtmlDocletWriter.java:1739) 
    [javadoc]  at com.sun.tools.doclets.formats.html.HtmlDocletWriter.writeAnnotationInfo(HtmlDocletWriter.java:1713) 
    [javadoc]  at com.sun.tools.doclets.formats.html.HtmlDocletWriter.writeAnnotationInfo(HtmlDocletWriter.java:1702) 
    [javadoc]  at com.sun.tools.doclets.formats.html.HtmlDocletWriter.writeAnnotationInfo(HtmlDocletWriter.java:1681) 
    [javadoc]  at com.sun.tools.doclets.formats.html.FieldWriterImpl.writeSignature(FieldWriterImpl.java:130) 
    [javadoc]  at com.sun.tools.doclets.internal.toolkit.builders.FieldBuilder.buildSignature(FieldBuilder.java:184) 
    [javadoc]  at sun.reflect.GeneratedMethodAccessor8.invoke(Unknown Source) 
    [javadoc]  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    [javadoc]  at java.lang.reflect.Method.invoke(Method.java:597) 
    [javadoc]  at com.sun.tools.doclets.internal.toolkit.builders.FieldBuilder.invokeMethod(FieldBuilder.java:114) 
    [javadoc]  at com.sun.tools.doclets.internal.toolkit.builders.AbstractBuilder.build(AbstractBuilder.java:90) 
    [javadoc]  at com.sun.tools.doclets.internal.toolkit.builders.AbstractMemberBuilder.build(AbstractMemberBuilder.java:56) 
    [javadoc]  at com.sun.tools.doclets.internal.toolkit.builders.FieldBuilder.buildFieldDoc(FieldBuilder.java:158) 
    [javadoc]  at sun.reflect.GeneratedMethodAccessor51.invoke(Unknown Source) 
    [javadoc]  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    [javadoc]  at java.lang.reflect.Method.invoke(Method.java:597) 
    [javadoc]  at com.sun.tools.doclets.internal.toolkit.builders.FieldBuilder.invokeMethod(FieldBuilder.java:114) 
    [javadoc]  at com.sun.tools.doclets.internal.toolkit.builders.AbstractBuilder.build(AbstractBuilder.java:90) 
    [javadoc]  at com.sun.tools.doclets.internal.toolkit.builders.AbstractMemberBuilder.build(AbstractMemberBuilder.java:56) 
    [javadoc]  at com.sun.tools.doclets.internal.toolkit.builders.ClassBuilder.buildFieldDetails(ClassBuilder.java:301) 
    [javadoc]  at sun.reflect.GeneratedMethodAccessor43.invoke(Unknown Source) 
    [javadoc]  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    [javadoc]  at java.lang.reflect.Method.invoke(Method.java:597) 
    [javadoc]  at com.sun.tools.doclets.internal.toolkit.builders.ClassBuilder.invokeMethod(ClassBuilder.java:101) 
    [javadoc]  at com.sun.tools.doclets.internal.toolkit.builders.AbstractBuilder.build(AbstractBuilder.java:90) 
    [javadoc]  at com.sun.tools.doclets.internal.toolkit.builders.ClassBuilder.buildClassDoc(ClassBuilder.java:124) 
    [javadoc]  at sun.reflect.GeneratedMethodAccessor19.invoke(Unknown Source) 
    [javadoc]  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    [javadoc]  at java.lang.reflect.Method.invoke(Method.java:597) 
    [javadoc]  at com.sun.tools.doclets.internal.toolkit.builders.ClassBuilder.invokeMethod(ClassBuilder.java:101) 
    [javadoc]  at com.sun.tools.doclets.internal.toolkit.builders.AbstractBuilder.build(AbstractBuilder.java:90) 
    [javadoc]  at com.sun.tools.doclets.internal.toolkit.builders.ClassBuilder.build(ClassBuilder.java:108) 
    [javadoc]  at com.sun.tools.doclets.formats.html.HtmlDoclet.generateClassFiles(HtmlDoclet.java:155) 
    [javadoc]  at com.sun.tools.doclets.internal.toolkit.AbstractDoclet.generateClassFiles(AbstractDoclet.java:164) 
    [javadoc]  at com.sun.tools.doclets.internal.toolkit.AbstractDoclet.startGeneration(AbstractDoclet.java:106) 
    [javadoc]  at com.sun.tools.doclets.internal.toolkit.AbstractDoclet.start(AbstractDoclet.java:64) 
    [javadoc]  at com.sun.tools.doclets.formats.html.HtmlDoclet.start(HtmlDoclet.java:42) 
    [javadoc]  at com.sun.tools.doclets.standard.Standard.start(Standard.java:23) 
    [javadoc]  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    [javadoc]  at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    [javadoc]  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    [javadoc]  at java.lang.reflect.Method.invoke(Method.java:597) 
    [javadoc]  at com.sun.tools.javadoc.DocletInvoker.invoke(DocletInvoker.java:215) 
    [javadoc]  at com.sun.tools.javadoc.DocletInvoker.start(DocletInvoker.java:91) 
    [javadoc]  at com.sun.tools.javadoc.Start.parseAndExecute(Start.java:340) 
    [javadoc]  at com.sun.tools.javadoc.Start.begin(Start.java:128) 
    [javadoc]  at com.sun.tools.javadoc.Main.execute(Main.java:41) 
    [javadoc]  at com.sun.tools.javadoc.Main.main(Main.java:31) 
+0

जेडीके के किस संस्करण में मिक्सअप का उपयोग किया जाता है? –

उत्तर

54

ऐसा लगता है कि यह Java bug के रूप में रिपोर्ट किया गया है। ऐसा लगता है कि किसी तृतीय पक्ष लाइब्रेरी (जैसे जुनीट) से एनोटेशन का उपयोग करके और जवाडोक इनवोकेशन में उस एनोटेशन के साथ जार शामिल नहीं है।

यदि ऐसा है, तो केवल javadoc पर -classpath विकल्प का उपयोग करें और अतिरिक्त जार फ़ाइलों को शामिल करें।

+2

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

+2

मेरे लिए, मुझे जैक्सड लाइब्रेरी को जावाडोक क्लासपाथ में जोड़ना पड़ा। –

+0

मुझे अपने क्लासपाथ में एनोटेशन.जर जोड़ना पड़ा, जो एंड्रॉइड-एसडीके/टूल्स/सपोर्ट डायरेक्टरी में है – crobicha

1

मुझे इस समस्या के बारे में कुछ जानकारी है लेकिन यह सही समाधान नहीं है।

यदि आप एनोटेशन से पहले एकल टिप्पणी लाइन \\\\ देते हैं और एक बार फिर javadoc चलाने की कोशिश करते हैं। इस समस्या का समाधान होगा

उदाहरण के लिए: sample.java फ़ाइल

@ChannelPipeline 

जावाडोक आदेश एक बार फिर से चलाने के लिए

\\\\@ChannelPipeline 

कोशिश परिवर्तन करता है। अब कक्षा कास्ट अपवाद नहीं होगा

0

मुझे यह समस्या भी मिली। मैं बिना किसी त्रुटि या चेतावनियों के ठीक से संकलित कर सकता हूं। लेकिन जब मैं जावाडोक उत्पन्न करता हूं, तो मुझे त्रुटि से नीचे आ गया।

[जावाडोक] java.lang.ClassCastException: com.sun.tools.javadoc.ClassDocImpl com.sun.javadoc.AnnotationTypeDoc में ढाला नहीं जा सकता है

यहाँ मेरी classpath लोड हो रहा है मेरी तृतीय-पक्ष-libs के लिए ...

<path id="build.classpath"> 
<fileset dir="."> 
    <include name="libs/*.jar" /> 
</fileset> 

मेरी जावा संकलन लक्ष्य पर ..

<target name="compile" depends="clean, makedir"> 
<javac includeantruntime="false" srcdir="${src.dir}" destdir="${build.dir}" classpathref="build.classpath"> 
    <compilerarg value="-Xlint:unchecked"/> 
</javac> 

और मेरे जावाडोक लक्ष्य पर ...

<target name="docs" depends="compile"> 
<javadoc packagenames="src" sourcepath="${src.dir}" destdir="${docs.dir}" 
    failonerror="no" 
    author="true" 
    version="true" 
    windowtitle="${Name} API" 
    doctitle="${Name}" 
    bottom="Copyright © 2014 ColayHIlls.com . All Rights Reserved."> 
    <fileset dir="${src.dir}"> 
      <include name="main/java/com/colayhills/jpcenter/business/service/**" /> 
    </fileset> 
</javadoc> 
<echo message="java docs has been generated!"/> 
</target> 

तो, मैं classpathref="build.classpath" विकल्प <javadoc टैग में डाला। अब यह मेरे लिए ठीक है।

0

वहाँ एक ClassCastException (1.8.0_101 वर्तमान में विफल हो रहा है) प्राप्त करने के लिए एक और तरीका है:

java.lang.ClassCastException: com.sun.tools.javadoc.MethodDocImpl cannot be cast to com.sun.tools.javadoc.AnnotationTypeElementDocImpl

जब जावाडोक ही एनोटेशन प्रक्रिया से पहले जावाडोक पाठ में एक एनोटेशन विधि के लिए एक संदर्भ का सामना होता है तो क्या होगा पहली बार कोड में इस्तेमाल किया।इन दो वर्गों को लें:

/** 
** {@link javax.annotation.Generated#value()} 
*/ 
public class TestClass1 {} 


@Generated("sometext") 
public class TestClass2 {} 

बग ऑर्डर निर्भर है। यदि जावाडोक TestClass1 पहले संसाधित करता है, तो ClassCastException फेंक दिया जाएगा। यदि जावाडोक TestClass2 पहले संसाधित करता है, तो यह ठीक हो जाएगा। बग को JDK-8170444 के रूप में रिपोर्ट किया गया है।

कामकाज के रूप में, अपने दस्तावेज़ पाठ में एनोटेशन विधियों से लिंक न करें।

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