gpt4 book ai didi

jar - 如何从 .jar 文件中的源构建 javadoc?

转载 作者:行者123 更新时间:2023-12-04 15:37:54 46 4
gpt4 key购买 nike

我必须从包含源文件和类文件的 myCode.jar 构建 Javadoc。
我可以在不提取 jar 的情况下这样做吗?
根据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 中找不到源文件。我相信消息来源在那里。
有什么建议么?

最佳答案

一些初步测试表明它不起作用(至少在我这里有的 OpenJDK 1.6.0_20 上)。

因此,我查看了源代码(可在 mercurial web-interface 中浏览)。 Javadoc(那里的版本,可能与我这里的版本不同)在其操作中使用了相当多的 Javac,看起来两者都在使用 javax.tools.JavaFileManager实现对其源文件的访问的接口(interface),特别是在子接口(interface)StandardJavaFileManager中.

This interface声称能够访问 zip 文件条目:

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 }

第一种情况将适用于您的通话,使用 .java文件 - 但由于它在文件系统中不作为文件存在( new File(name).exists() 返回 false),这无济于事,您会得到第三种情况,即“找不到文件”错误。

用更合适的条件替换这个条件(如 !fm.getJavaFileObjects(name).isEmpty() - 假设上下文是用 JavaFileManager 初始化的,它实际上在 jar/zip 文件中查找,我现在没有检查它。

因此,您必须解压缩源 jar,或者修补 javac 实现(最好将其贡献给主 javac 源)。

关于jar - 如何从 .jar 文件中的源构建 javadoc?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2355344/

46 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com