如何在JavaDoc中显示我的示例代码,而无需手动复制/粘贴它?

时间:2014-07-01 18:24:21

标签: java documentation javadoc

我需要直接在我的库的JavaDoc文档中显示我的示例代码,包括其输出。但我希望自动执行此过程,因此示例代码可以由外部进程进行单元测试,并且显示,除非它实际工作。

我没有找到一种方法来做到这一点,除非每次进行更改时手动复制粘贴源代码(和输出) - 这是无法管理的,因为现在我的各种类型中有超过一百个示例类项目。或者,我可以简单地显示这些示例,而是提供指向它们的链接。

这两种解决方案都是不可接受的,我希望有更好的方法可以做到这一点。

如何自动插入示例代码,以便直接显示在JavaDoc中?

感谢。

2 个答案:

答案 0 :(得分:1)

这是我尝试使用CodeletGitHub link)回答的问题。

Codelet 使用taglet自动将已经过单元测试的示例代码插入到JavaDoc中。与所有taglet一样,Codelet作为javadoc.exe的一部分执行。它现已发布测试版(并且需要beta测试人员!)。

有四个Codelet标记:

  • {@codelet.and.out}:显示紧跟其输出的源代码
  • {@codelet}:仅显示源代码
  • {@codelet.out}:仅显示输出
  • {@file.textlet}:显示任何纯文本文件的内容,例如示例代码的输入。

A common example

{@.codelet.and.out com.github.aliteralmind.codelet.examples.adder.AdderDemo%eliminateCommentBlocksAndPackageDecl()}

使用eliminateCommentBlocksAndPackageDecl()"自定义程序"消除包声明行和所有多行注释(例如许可证和JavaDoc块)。

输出(水平规则之间):


实施例

public class AdderDemo  {
   public static final void main(String[] ignored)  {

      Adder adder = new Adder();
      System.out.println(adder.getSum());

      adder = new Adder(5, -7, 20, 27);
      System.out.println(adder.getSum());
   }
}

输出

0
45

另一种方法是仅显示示例代码的一部分:A code snippet

{@.codelet.and.out com.github.aliteralmind.codelet.examples.adder.AdderDemo%lineRange(1, false, "Adder adder", 2, false, "println(adder.getSum())", "^ ")}

这显示与上面相同的示例,从(包含)Adder adder的行开始,以 second println(adder.getSum())结束。这也消除了额外的压痕,在这种情况下是六个空格。

输出(水平规则之间):


实施例

Adder adder = new Adder();
System.out.println(adder.getSum());

adder = new Adder(5, -7, 20, 27);
System.out.println(adder.getSum());

<强> 输出:

0
45

所有taglet都接受定制器。

可以编写自己的定制器,例如,可以"linkify" function names,更改显示源和输出的模板,并对任何或所有行进行任意更改。示例包括以黄色突出显示某些内容或进行正则表达式替换。

作为最后一个例子,与上面的例子形成鲜明对比的是,这里是一个从示例代码中盲目打印所有行的标记,没有任何更改。它使用no customizer

{@.codelet.and.out com.github.aliteralmind.codelet.examples.adder.AdderDemo}

输出(水平规则之间):


实施例

/*license*\
   Codelet: Copyright (C) 2014, Jeff Epstein (aliteralmind __DASH__ github __AT__ yahoo __DOT__ com)

   This software is dual-licensed under the:
   - Lesser General Public License (LGPL) version 3.0 or, at your option, any later version;
   - Apache Software License (ASL) version 2.0.

   Either license may be applied at your discretion. More information may be found at
   - http://en.wikipedia.org/wiki/Multi-licensing.

   The text of both licenses is available in the root directory of this project, under the names &quot;LICENSE_lgpl-3.0.txt&quot; and &quot;LICENSE_asl-2.0.txt&quot;. The latest copies may be downloaded at:
   - LGPL 3.0: https://www.gnu.org/licenses/lgpl-3.0.txt
   - ASL 2.0: http://www.apache.org/licenses/LICENSE-2.0.txt
\*license*/
package  com.github.aliteralmind.codelet.examples.adder;
/**
   <P>Demonstration of {@code com.github.aliteralmind.codelet.examples.adder.Adder}.</P>

   <P>{@code java com.github.aliteralmind.codelet.examples.AdderDemo}</P>

   @since  0.1.0
   @author  Copyright (C) 2014, Jeff Epstein ({@code aliteralmind __DASH__ github __AT__ yahoo __DOT__ com}), dual-licensed under the LGPL (version 3.0 or later) or the ASL (version 2.0). See source code for details. <A HREF=&quot;http://codelet.aliteralmind.com&quot;>{@code http://codelet.aliteralmind.com}</A>, <A HREF=&quot;https://github.com/aliteralmind/codelet&quot;>{@code https://github.com/aliteralmind/codelet}</A>
 **/
public class AdderDemo  {
   public static final void main(String[] ignored)  {

      Adder adder = new Adder();
      System.out.println(adder.getSum());

      adder = new Adder(5, -7, 20, 27);
      System.out.println(adder.getSum());
   }
}

<强> 输出:

0
45

Codelet现已发布测试版。请考虑试一试,并在GitHub问题跟踪器中发表您的评论和批评。

答案 1 :(得分:1)

不完全是你想要的,但也许另一个有趣的方法是Play Framework

的文档

他们使用Markdown进行记录,并将代码示例与特殊注释集成在一起(在Guidelines for writing Play documentation中描述)。因此,所有代码示例都可以在它们包含在文档中之前进行测试。

他们(不幸的是自定义)生成文档的解决方案可以在play-doc GitHub repository中找到。