我希望能够为我的maven项目生成javadoc,即使在JRE而不是JDK下运行时,也可以找到maven调用的javadoc命令。换句话说,除了JRE中的内容以及Maven可以下载并用作工件之外,不依赖于任何东西。
有没有简单的方法可以使用Maven生成javadocs而无需使用仅在JDK中找到的代码?
编辑:显然,理解我为什么要这样做很重要。我们是一个规模较大的组织中的一个小团队,每年都会发布我们的产品套件,然后我们的客户在方便的时候进行升级(由于部署规模庞大而且价格昂贵且时间要求很高,所以通常会跳过一个或多个版本)我们的生活是能够在有关客户正在运行的任何版本的现有部署的短时间内提供错误修正和新功能。作为一个例子,我最近为我五年前写的一个组件做了一个错误修正,从那以后基本上没有动过。
因此,我们的构建过程的长期稳定性对我们来说非常重要,并且能够在新版本的Java可用时使用它们。我们已将完整的构建环境迁移到Maven - 它在Maven Central购买永久冻结的工件 - 现在我们开始考虑我们还需要做什么。
随着最近宣布未来版本的javac将不支持旧目标(http://openjdk.java.net/jeps/182),我们得出结论,我们的长期目标是最小化我们对底层Java环境的依赖性,最好是简单的JRE。我们正在使用可从Maven Central获得的Eclipse编译器从JDK中完全替换javac,现在我们来看看javadoc生成。
获取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插件与其余代码分离。
当然,在遵循此建议之前,您应该由您的法律部门运行此建议。
您可以使用名为doxygen的产品。它通常用于为C ++或其他没有内置javadoc
产品的语言创建文档。
您可以设置doxygen来读取javadoc注释并将产品类似输出到javadoc。
生成java文档的命令实际上称为javadoc,它仅适用于JDK。
来自Javadoc FAQ:
String[] javadocargs = { "-d", "docs",
"-sourcepath", "/home/user/src",
"java.applet" };
com.sun.tools.javadoc.Main.main(javadocargs);
tools.jar需要在您的类路径中。
我们提供了一个名为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上找到)!
你为什么不在http://docs.oracle.com/javase/6/docs/technotes/guides/javadoc/standard-doclet.html#source下载javadoc源码
并重建它以满足你在maven的需要