我必须从包含源文件和类文件的myCode.jar构建Javadoc。我能不把罐子拿出来吗?
根据http://java.sun.com/j2se/1.5.0/docs/tooldocs/windows/javadoc.html#classpath,我应该能够这样做:C:\>javadoc -d docs -classpath myCode.jar net\kem\jmx\CacheManagerMBean.java,但是,我得到了以下错误:
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似乎,javadoc无法在jar中找到源文件。我相信消息来源在那里。
有什么建议吗?
发布于 2011-02-25 18:27:45
一些最初的测试表明它不起作用(至少在OpenJDK 1.6.0_20上是这样的,我在这里有)。
因此,我查看了源代码(在汞网络接口中是可浏览的)。Javadoc (在这里的版本可能与我这里的版本不同)在its的操作中使用了相当多的Javac,看起来两者都在使用javax.tools.JavaFileManager接口来实现对源文件的访问,特别是在子接口StandardJavaFileManager中。
这个接口声称能够访问zip文件条目:
此文件管理器创建表示常规文件、压缩文件条目或类似的基于容器的文件系统中的条目的文件对象。
但是在这里它是如何使用的(在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 }第一种情况适用于.java文件的调用--但是由于它在文件系统中不作为文件存在(new File(name).exists()返回false),这没有帮助,相反,您将得到第三种情况,即“未找到文件”错误。
当用更合适的条件替换这个条件时(比如!fm.getJavaFileObjects(name).isEmpty() ),它看起来可以工作(条件是上下文是用JavaFileManager初始化的,而JavaFileManager实际上是在jar/zip文件中查找的,我现在没有检查这个文件)。
因此,您必须解压缩源jar,或者修补javac实现(最好将其贡献给主javac源)。
https://stackoverflow.com/questions/2355344
复制相似问题