继http://asciidoctor.org/news/2014/08/12/asciidoctor-1-5-0-released/[Asciidoctor 1.5.0]和http://asciidoctor.org/news/2014/08/21/asciidoctorj-1-5-0-released/[AsciidoctorJ 1.5.0]的发布之后,https://github.com/asciidoctor/asciidoclet/[Asciidoclet]的1.5.0版本已经发布,包含了几个重要的新功能,包括一个全新的外观和感觉!
Asciidoclet是什么?
Asciidoclet允许Java开发者使用可移植且丰富的http://asciidoctor.org/docs/what-is-asciidoc/[AsciiDoc]语法来编写Javadoc注释,而非HTML。
简而言之,为什么要像这样写混乱的Javadoc呢?
/**
* This class has the following features:
* <ul>
* <li>Support for <strong>foo</strong></li>
* <li>Support for bar</li>
* </ul>
*/
public class Thing implements Something { ... }
当你可以像这样编写整洁的Javadoc时!
/**
* This class has the following features:
*
* - Support for *foo*
* - Support for bar
*/
public class Thing implements Something { ... }
好多了!现在源代码中的注释更容易阅读和编写,并且可以在Javadoc之外重用。最重要的是,Javadoc生成的HTML还是看起来棒极了(可能甚至更好)。
当然,这个例子仅仅触及皮毛。通过轻量级AsciiDoc语法可以使用表格、列表、带语法高亮的代码示例、链接、包含以及http://asciidoctor.org/[Asciidoctor]的所有功能。
现在,开发者可以专注于_内容_而不是_格式_,并且仍然获得一个美观的最终成果。
文物信息
Group Id | Artifact Id | Version | Download |
---|---|---|---|
org.asciidoctor |
Group Id | Artifact Id | Version | Download |
---|---|---|---|
org.asciidoctor |
安装中
在Maven中,只需将Asciidoclet doclet的名称和工件添加到`maven-javadoc-plugin`声明中:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>2.9</version>
<executions>
<execution>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
<configuration>
<doclet>org.asciidoctor.Asciidoclet</doclet>
<docletArtifact>
<groupId>org.asciidoctor</groupId>
<artifactId>asciidoclet</artifactId>
<version>1.5.0</version>
</docletArtifact>
</configuration>
</plugin>
查看Asciidoclet指南,了解适用于其他构建系统的示例以及所有可用的doclet选项。
发布亮点
基于Asciidoctor 1.5.0构建
Asciidoclet继承了来自http://asciidoctor.org/news/2014/08/12/asciidoctor-1-5-0-released/[Asciidoctor 1.5.0]和http://asciidoctor.org/news/2014/08/21/asciidoctorj-1-5-0-released/[AsciidoctorJ 1.5.0]的所有改进。
Important
|
Asciidoctor 1.5.0 引入了一些语法变更。请参阅http://asciidoctor.org/docs/migration/[迁移指南]以了解如何迁移您的内容的详细信息。 |
改进的样式表
Asciidoclet包含一个默认的样式表,其中包含来自Asciidoctor 1.5.0的样式。这意味着在Javadoc中的AsciiDoc内容会以类似于在其他环境中使用Asciidoctor时的外观和感觉进行渲染。
Note
|
Javadoc的HTML输出会随着Java平台的不同版本而变化,因此Asciidoclet会根据其运行的Java版本选择合适的样式表:
|
如果你想使用自己的样式表,你仍然可以通过使用Javadoc的`-stylesheetfile`选项来实现。
AsciiDoc概述文件
Javadoc的`-overview`选项允许你指定一个HTML文件,该文件用作生成文档中的概述或索引页面。这对于大型项目特别有用,概述可以为用户提供有用的介绍,并帮助他们导航API。
Asciidoclet现在也支持用AsciiDoc编写的概述文件,完全支持AsciiDoc的功能,如包含和文档属性。以[x-].adoc
、*.ad
、*.asciidoc`或[x-]
.txt`命名的概述文件将由Asciidoclet处理。其他文件被假设为HTML,并将由Javadoc的标准文档工具处理。
文档属性
Asciidoclet 现在完全支持 Asciidoctor 的http://asciidoctor.org/docs/user-manual/#attributes[文档属性]。这些是 Asciidoctor 最强大的特性之一。文档属性是可以传递给 Asciidoctor 的参数,用以影响最终输出的生成方式。
在运行Asciidoclet时,使用一个或多个`-a`(或`--attribute`)选项来指定属性。`--attributes-file`选项从AsciiDoc文件中读取属性。这些属性在渲染Javadoc注释时传递给Asciidoctor。
这里有一些关于文档属性在你的Javadoc中可能如何有用的例子。
变量替换
在Javadoc注释或概述文件中的属性引用被替换为属性值。
/**
* {product-name} 将改变你的生活!
* @version {version}
*/
当使用 -a product-name=Foo -a version=1.0
参数运行doclet时,Asciidoctor会在生成的HTML输出中将所有[x-]{product-name}`和[x-]
{version}`属性引用替换为给定的值。这使得在不改变源代码的情况下将值注入到Javadoc中变得非常简单。
条件包含
AsciiDoc的http://asciidoc.org/userguide.html#_conditional_inclusion_macros[条件指令]可以根据属性的存在与否选择性地包含内容。当相同的AsciiDoc源码在不同环境中使用时,这非常有用。
例如,如果你想在Javadoc概述页面和你的网站中重用相同的AsciiDoc内容,但有一些差异,你可以使用属性来告诉Asciidoctor在何时应该包含某些内容:
= Foo项目的文档
ifdef::javadoc[] // content that should only appear in Javadoc \endif::javadoc[]
ifdef::my-website[] // content that should only appear on the web site \endif::my-website[]
Asciidoclet在运行时自动设置`javadoc`属性,因此可以轻松选择仅限Javadoc的内容。当然,你也可以定义自己的属性。
Java和Ruby扩展支持
Asciidoctor可以使用Java或Ruby库进行扩展,Asciidoclet也继承了这种能力。
-
Java扩展在类路径中可用时会自动加载,使用http://asciidoctor.org/docs/asciidoctorj/#extension-spi[AsciidoctorJ的扩展SPI]。
-
Ruby库(Gems)通过使用`-r`(或`--require`)选项来加载。
Important
|
在使用`--require`选项时,我们建议同时指定`--gem-path`选项,以明确设置已安装宝石的位置。这样做可以确保您的构建保持可移植性和可复制性。您可以使用https://github.com/torquebox/jruby-maven-plugins/blob/master/gem-maven-plugin/src/it/initialize/pom.xml[gem-maven-plugin]直接将宝石安装到您的构建目录中。 |
许多扩展都可用,但对于Javadoc作者可能最有用的一个是http://asciidoctor.org/docs/asciidoctor-diagram/[Asciidoctor Diagram]。让我们看看它如何与Asciidoclet一起使用。
在Javadoc中嵌入图表
Asciidoctor Diagram是一个受欢迎的Asciidoctor扩展,它允许你在AsciiDoc源代码中嵌入纯文本图表描述,在Asciidoctor运行时会被渲染成图像。这在Javadoc中描述软件实现的架构或行为时可能极其有价值。
这是一个包含http://plantuml.sourceforge.net/index.html[PlantUML]序列图的Javadoc注释示例:
/**
* This class implements the following protocol:
*
* [plantuml]
* ....
* Alice -> Bob: Authentication Request
* Bob --> Alice: Authentication Response
*
* Alice -> Bob: Another authentication Request
* Alice <-- Bob: another authentication Response
* ....
*/
public class AuthServer { ... }
上图在Javadoc输出中的显示方式如下:
并不错!开发者可以很容易地以纯文本的形式查看和更新图表,而且阅读Javadoc的用户将会看到美观的渲染图像。
许多其他类型的图表也得到支持,包括http://graphviz.org/[Graphviz]、http://blockdiag.com/[blockdiag]和http://ditaa.sourceforge.net/[ditaa]。更多示例,请参见http://asciidoctor.org/docs/asciidoctor-diagram/[Asciidoctor Diagram文档]。
要在Asciidoclet中启用http://asciidoctor.org/docs/asciidoctor-diagram/[Asciidoctor Diagram]支持:
-
安装Asciidoctor Diagram gem,
asciidoctor-diagram
:$ gem install asciidoctor-diagram
-
使用以下doclet选项运行Asciidoclet:
--require asciidoctor-diagram --gem-path ${env.GEM_PATH} (1) --attribute data-uri (2)
-
选项
[x-]
--gem-path ${env.GEM_PATH}` 告诉 Asciidoctor 的 JRuby 运行时在使用--require
时在哪里找到 gems(有效地在内部设置了$GEM_PATH
环境变量)。 -
"`data-uri`属性是必要的,这样图像数据就会嵌入到生成的HTML文件中。脚注:[如果没有`data-uri`属性,Asciidoctor Diagram会将图像文件写到与生成的HTML不对应的位置。在撰写本文时,Asciidoctor Diagram正在解决这个问题。详情请参见https://github.com/asciidoctor/asciidoctor-diagram/issues/39[issue #39]。]"
-
-
欣赏你的Javadoc中装饰的美丽图表!
谢谢!
我们希望这个新版本能让你的Javadocs变得更好。我们感谢https://github.com/asciidoctor/asciidoclet/graphs/contributors[每一个对Asciidoclet做出贡献的人]。如果你有关于如何改进它的想法,我们总是欢迎通过https://github.com/asciidoctor/asciidoclet/[GitHub上的仓库]提出想法和拉取请求。