我希望能够为我的maven项目生成javadoc,即使在JRE而不是JDK下运行时,也会发现maven调用的javadoc命令。换句话说,除了JRE中的内容以及Maven可以下载并用作工件之外的任何东西都不依赖。
有没有简单的方法可以使用Maven生成javadoc而无需使用仅在JDK中找到的代码?
编辑:显然,了解为什么我想要这样做很重要。我们是一个规模较大的组织中的一个小团队,每年都会发布我们的产品套件,然后我们的客户在方便的时候进行升级(由于部署规模庞大而且价格昂贵且时间要求很高,因此通常会跳过一个或多个版本)我们的生活是能够在有关客户正在运行的任何版本的现有部署的短时间内提供错误修正和新功能。作为一个例子,我最近为我五年前写的一个组件做了一个错误修正,从那以后基本上没有被触及。
因此,我们构建过程的长期稳定性对我们非常重要,并且能够在新版本的Java可用时使用它们。我们已将完整的构建环境迁移到Maven - 它在Maven Central购买永久冻结的工件 - 现在我们开始考虑我们还需要做些什么。
随着最近宣布未来版本的javac将不支持旧目标(http://openjdk.java.net/jeps/182),我们得出结论,我们的长期目标是最小化我们对底层Java环境的依赖性,最好是简单的JRE。我们正在使用可从Maven Central获得的Eclipse编译器从JDK中完全替换javac,现在我们来看看javadoc生成。
答案 0 :(得分:11)
获取JavaDoc from the OpenJDK的源代码,并使用所有相关的JavaDoc类从中构建自己的JAR。编写一个依赖于您的JAR的maven
插件,并从中调用com.sun.tools.javadoc.Main.main
。
它看起来不像you need to open up your sources when using OpenJDK's classes,您应该可以在没有严格限制的情况下分发生成的插件。
即使条款不包含这些工具,您也可以为maven
编写一个开源GPL-2插件,并将其作为您在GPL-2下分发的单独产品。然后,您的产品将使用maven plugin:download
下载并安装插件,从而将JavaDoc插件与其余代码分离。
当然,在遵循此建议之前,您应该由您的法律部门运行此建议。
答案 1 :(得分:7)
一边(不直接回答你的问题):
Eclipse开发指南建议使用Eclipse编译器和JDK工具(对于javadoc菜单选项)。
Eclipse Generate Javadoc Wizard: what is "Javadoc Command"?
从您的评论中,很明显您不想这样做,这是您的权利:)
回答您的问题。您可以从构建工具中调用一些开源/免费的javadoc工具:
主要
小
(创建自己的maven命令/插件?)
(创建自己的maven命令/插件?)
优点:在JDK之外工作。有些文档比javadoc有更丰富的文档 缺点:与javadoc相比可能有一些非标准的行为(对您来说可能不是问题)。
答案 2 :(得分:2)
您可以使用名为doxygen的产品。它通常用于为C ++或其他内置javadoc
产品的语言创建文档。
您可以设置doxygen来读取javadoc注释并将产品类似输出到javadoc。
答案 3 :(得分:1)
生成java文档的命令实际上称为 javadoc ,它仅适用于JDK。
答案 4 :(得分:1)
来自Javadoc FAQ:
String[] javadocargs = { "-d", "docs",
"-sourcepath", "/home/user/src",
"java.applet" };
com.sun.tools.javadoc.Main.main(javadocargs);
tools.jar 需要在您的类路径中。
答案 5 :(得分:1)
我们提供了一个名为 DocFlex/Javadoc 的工具,Glen Best已经提到了here(虽然有点不正确)。
但在深入研究之前,我想先介绍一下这是什么。
基本上,Javadoc(由JDK提供)是两件事的调用者:
Javadoc首先调用Java解析器来收集有关Java源代码的信息,从中构建一个DOM类似的结构,以Doclet API的形式表示。 然后,它调用 doclet 。这是一个Javadoc插件,它使用Doclet API作为数据源来生成任何类型的输出。
您认为标准JavaDoc由Standard Doclet生成。 所以,你可以想象doclet是整个Javadoc实现的最大部分。
现在,关于我们的 DocFlex/Javadoc 软件。 从本质上讲,它是一种快速开发特殊doclet的工具,它可以利用 我们用于模板驱动文档生成器的更通用的技术。 (实际上,我们的重点是远离Javadoc的东西。所以,它更像是主要产品的副产品。)
在我们的解释中,doclet本身(作为文档生成器)以特殊模板集的形式编程。这些模板更类似于XSLT脚本,但仅限于概念(我们不在后台的某处使用XSLT)。 Doclet API的类DOM组织允许我们对我们的技术采用类似XSLT / XPath的方法。 因此,每个doclet都包含两件事:
此处,模板集是一个可互换的部分(实际上是我们工具的重点)。
目前,我们提供了一个随时可用的 JavadocPro 模板集,它可以生成相当于标准JavaDocs的HTML输出(标准Doclet中没有一些重要的额外功能) )。在这里,您可以看到使用它生成的demo JavaDoc:
整个DocFlex/Javadoc是商业产品。 但我们还提供了一个名为 DocFlex / Doclet 的轻量版,它是免费的。 它仅包括模板解释器和一些现成的模板集(包括JavadocPro)。因此,您可以使用它来生成非常类似于标准的JavaDoc(在HTML中)以及RTF文档。
现在,关于主要问题。我们的工具可以在没有JDK的情况下使用吗?
没有。因为,作为Javadoc插件(我们工具的doclet部分),它仍然需要Javadoc。
另一方面,让它完全独立于JDK所缺少的是Java解析器, 我们不需要一个完整的Java解析器,因为我们没有生成可执行代码。 我们需要的是轻量级的东西,能够构建像Doclet API这样的结构。
如果我们知道对这种事情的需求是什么,我们可以考虑开发一个。 还有其他问题吗?请通过电子邮件告知我们(在website上找到)!
答案 6 :(得分:1)
为什么不下载javadoc来源? http://docs.oracle.com/javase/6/docs/technotes/guides/javadoc/standard-doclet.html#source
并重建它以满足您在maven中的需求