27

即使在 JRE 而不是 JDK 下运行时,我也希望能够为我的 maven 项目生成 javadoc,其中找到了 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 的生成。

4

7 回答 7

11

Get the source of the JavaDoc from the OpenJDK, and build your own JAR from it with all the relevant JavaDoc classes. Write a maven plugin that relies on your JAR, and call com.sun.tools.javadoc.Main.main from it.

It does not look like you need to open up your sources when using OpenJDK's classes, you should be OK to distribute the resultant plug-in without harsh restrictions.

Even if the terms do not cover the tools, you could write an Open Source GPL-2 plugin for maven, and make it a separate product that you distribute under GPL-2. Your product would then download and install the plugin using maven plugin:download, thus separating out your JavaDoc plugin from the rest of your code.

Of course you should run this suggestion by your legal department before following this advice.

于 2013-07-14T21:29:56.993 回答
7
  1. 旁白(不直接回答您的问题):

    Eclipse Development Guide 建议同时使用 Eclipse 编译器和 JDK 工具(用于 javadoc 菜单选项)。

    http://help.eclipse.org/juno/index.jsp?topic=%2Forg.eclipse.jdt.doc.user%2Freference%2Fref-export-javadoc.htm

    Eclipse 生成 Javadoc 向导:什么是“Javadoc 命令”?

    从您的评论中,很明显您不想走这条路,这是您的权利:)

  2. 回答您的问题。您可以从构建工具中调用一些开源/免费的 javadoc 工具:

    优点:在 JDK 之外工作。有些具有比 javadoc 更丰富的文档。
    缺点:与 javadoc 相比,可能有一些非标准行为(对您来说可能不是问题)。

于 2013-07-15T02:48:20.087 回答
2

您可以使用一种名为doxygen的产品。它通常用于为 C++ 或其他没有javadoc内置产品的语言创建文档。

您可以设置 doxygen 来读取 javadoc 注释并生成与 javadoc 类似的输出。

于 2013-07-15T00:50:22.513 回答
1

Javadoc 常见问题解答

String[] javadocargs = { "-d", "docs",
                         "-sourcepath", "/home/user/src",
                         "java.applet" };
com.sun.tools.javadoc.Main.main(javadocargs);

tools.jar 需要在您的类路径中。

于 2013-07-14T19:23:31.083 回答
1

我们提供了一个名为DocFlex/Javadoc的工具,Glen Best在这里已经提到过(虽然有点不正确)。

但在深入探讨之前,我想提供一些关于这一切的介绍。

基本上,Javadoc(由 JDK 提供)是两件事的调用者:

  1. Java 解析器
  2. 一个 doclet

Javadoc 首先调用 Java 解析器以收集有关 Java 源的信息,并从中构建以Doclet API形式表示的类似DOM的结构。然后,它调用一个doclet。这是一个 Javadoc 插件,它使用 Doclet API 作为数据源来生成任何类型的输出。

您所看到的标准 JavaDoc 是由Standard Doclet生成的。因此,您可以想象 doclet 是整个 Javadoc 实现的最大部分。

现在,关于我们的DocFlex/Javadoc软件。从本质上讲,它是一种用于快速开发特殊 doclet 的工具,它利用了我们更通用的模板驱动文档生成器技术。(实际上,我们的重点是远离 Javadoc 的东西。所以,它更像是主要内容的副产品)。

在我们的解释中,doclet 本身(作为文档生成器)以特殊模板集的形式进行编程。这些模板更类似于 XSLT 脚本,但只是概念性的(我们不会在后台某处使用 XSLT)。Doclet API 的类 DOM 组织使我们能够利用对我们的技术通用的类似 XSLT/XPath 的方法。因此,每个 doclet 包含两件事:

  1. 模板解释器
  2. 一个模板集

在这里,模板集是一个可互换的部分(这实际上是我们工具的重点)。

目前,我们提供了一个即用型JavadocPro模板集,它生成与标准 JavaDocs 等效的 HTML 输出(标准 Doclet 中没有一些重要的额外功能)。在这里,您可以看到使用它生成的演示 JavaDoc

在此处输入图像描述

整个DocFlex/Javadoc是一个商业产品。但我们也提供了一个名为DocFlex/Doclet的轻量版,它是免费的。它只包括模板解释器和一些现成的模板集(包括JavadocPro)。因此,您可以使用它来生成与标准文档(HTML 格式)非常相似的 JavaDoc 以及 RTF 文档。


现在,关于主要问题。我们的工具可以在没有 JDK 的情况下使用吗?

不,因为作为 Javadoc 插件(我们工具的 doclet 部分),它仍然需要 Javadoc。

另一方面,要使其完全独立于 JDK,缺少的是 Java 解析器,我们不需要成熟的 Java 解析器,因为我们没有生成可执行代码。我们需要的是轻量级的,能够构建类似 Doclet API 的结构。

如果我们知道对这种东西的需求可能是什么,我们可以考虑开发一个。还有其他问题吗?通过电子邮件告诉我们(在我们的网站上找到)!

于 2013-07-15T15:06:05.683 回答
1

生成 java 文档的命令实际上称为javadoc,它仅适用于 JDK。

于 2013-06-12T18:57:16.733 回答
1

为什么不从 http://docs.oracle.com/javase/6/docs/technotes/guides/javadoc/standard-doclet.html#source下载 javadoc 源

并在 Maven 中重建它以满足您的需求

于 2013-07-19T11:15:14.243 回答