2010-03-01 5 views
6

मुझे myCode.jar से जवाडोक बनाना है जिसमें स्रोत और कक्षा दोनों फ़ाइलें शामिल हैं। क्या मैं इसे जार निकालने के बिना कर सकता हूं?एक .jar फ़ाइल के भीतर स्रोतों से जावाडोक कैसे बनाएं?

http://java.sun.com/j2se/1.5.0/docs/tooldocs/windows/javadoc.html#classpath के अनुसार मैं तो इस तरह से करने के लिए सक्षम होना चाहिए:

javadoc: error - File not found: "net\kem\jmx\CacheManagerMBean.java" 
[search path for source files: [myCode.jar]] 
[search path for class files: [C:\Program Files\Java\jdk1.5.0_17\jre\lib\rt.jar, C:\Program Files\Java\jdk1.5.0_17\jre\lib\jsse.jar, 
C:\Program Files\Java\jdk1.5.0_17\jre\lib\jce.jar, C:\Program Files\Java\jdk1.5.0_17\jre\lib\charsets.jar, C:\Program Files\Java\jd 
k1.5.0_17\jre\lib\ext\dnsns.jar, C:\Program Files\Java\jdk1.5.0_17\jre\lib\ext\localedata.jar, C:\Program Files\Java\jdk1.5.0_17\jre 
\lib\ext\sunjce_provider.jar, C:\Program Files\Java\jdk1.5.0_17\jre\lib\ext\sunpkcs11.jar, C:\Projects\RenderClusterController\WebCo 
ntent\WEB-INF\lib\makoRenderJMX.jar]] 
[done in 360 ms] 
1 error 

ऐसा लगता है, जावाडोक जार के अंदर स्रोत फ़ाइलें नहीं मिल सकता है: C:\>javadoc -d docs -classpath myCode.jar net\kem\jmx\CacheManagerMBean.java हालांकि, मैं निम्नलिखित त्रुटि मिलती है। मुझे विश्वास है कि स्रोत वहां हैं।

कोई सुझाव?

+0

डबल जांचें कि जार में वास्तव में स्रोत फ़ाइलें हैं (इसे ज़िप के रूप में खोलें फ़ाइल) आप नेट \ kem ... को इसके बजाय बिंदुओं को समायोजित करने की कोशिश करना चाहेंगे \ या इसे पूरी तरह से हटा सकते हैं – mikek3332002

उत्तर

3

कुछ पहले परीक्षणों से संकेत मिलता है कि यह काम नहीं करता है (कम से कम ओपनजेडीके 1.6.0_20 पर, जो मेरे पास है)।

तो, मैंने स्रोत में देखा (mercurial web-interface में ब्राउज़ करने योग्य)। जावाडोक (संस्करण में, जो मेरे पास है उससे भिन्न हो सकता है) ऑपरेशन के लिए जावैक के कुछ बिट्स का उपयोग करता है, और ऐसा लगता है कि दोनों javax.tools.JavaFileManager इंटरफ़ेस का उपयोग अपनी स्रोत फ़ाइलों तक पहुंच को लागू करने के लिए कर रहे हैं, खासकर सबिनटरफेस StandardJavaFileManager

This file manager creates file objects representing regular files, zip file entries, or entries in similar file system based containers.

लेकिन यहाँ है कि यह कैसे (JavaDocTool.getRootDocImpl() में) प्रयोग किया जाता है:

148     String name = it.head; 
    149     if (!docClasses && name.endsWith(".java") && new File(name).exists()) { 
    150      JavaFileObject fo = fm.getJavaFileObjects(name).iterator().next(); 
    151      docenv.notice("main.Loading_source_file", name); 
    152      JCCompilationUnit tree = parse(fo); 
    153      classTrees.append(tree); 
    154     } else if (isValidPackageName(name)) { 
    155      names = names.append(name); 
    156     } else if (name.endsWith(".java")) { 
    157      docenv.error(null, "main.file_not_found", name); 
    158     } else { 
    159      docenv.error(null, "main.illegal_package_name", name); 
    160     } 

पहला मामला एक साथ अपने कॉल में लागू होगा

This interface दावों ज़िप फ़ाइल प्रविष्टियों उपयोग करने में सक्षम होने के लिए .java फ़ाइल - लेकिन चूंकि यह फ़ाइल सिस्टम में फ़ाइल के रूप में मौजूद नहीं है (new File(name).exists() झूठी रिटर्न), इससे मदद नहीं मिलती है, और इसके बजाय आपको "फ़ाइल नहीं मिली" त्रुटि के साथ तीसरा मामला मिलता है।

ऐसा लगता है कि यह जब एक अधिक उपयुक्त एक के साथ इस हालत की जगह काम कर सकता लग रहा है (जैसे !fm.getJavaFileObjects(name).isEmpty() - प्रदान की संदर्भ एक JavaFileManager जो वास्तव में जार/ज़िप फ़ाइलें, जो मैं अब जांच नहीं में लग रहा है के साथ आरंभ नहीं हो जाता

तो, आपको या तो अपने स्रोत जार को अनपैक करना होगा, या अपने जावैक कार्यान्वयन को पैच करना होगा (अधिमानतः इसे मुख्य जावैक स्रोत में योगदान देना)।