介绍

标准从何而来?

插件文档标准的创建是为了解决经常抱怨缺乏文档的问题,特别是在 Maven 插件上。该标准基于 Maven 开发邮件列表中提出的建议,并进行了一些改进。这是一个 Maven 插件应该有哪些基本文档的社区共识。

为什么我们需要文档标准?

该标准不是一套规则,而是帮助插件开发人员更好地记录他们的插件的指南,以造福插件用户。该标准还提醒插件开发人员需要记录的重要细节,以帮助加快插件的采用。

生成的文档

建议您让 Maven 为插件生成基本信息,以确保基本信息始终准确并与插件实现同步。

文档是通过运行生成的

mvn site

它将根据 POM 中的信息以及 POM 中src/site配置的其他报告插件生成一个插件站点。最重要的报告插件是Maven 插件插件,它将根据 mojo 注释为每个插件目标生成文档。但是为了使生成的站点可用,Maven 站点插件应该可以使用所需的信息。

POM 元素

Maven 从 POM 中提取信息以生成项目信息下的页面。拥有一个好的文档的第一步是要有一个准确可见的基础项目信息,Maven 可以为插件提供这个,只要 POM 中的信息是完整的、描述性的和准确的。

所需元素

有效 POM 的最少元素:

  • <modelVersion>- POM 模型版本,目前为 4.0.0
  • <groupId>- 包名
  • <artifactId>- 工件名称
  • <packaging>- POM 产生的工件类型
  • <version>- 插件版本

可选元素

这些可能是有效 POM 中的可选元素,但它们是用户有效使用插件所需的重要基本项目信息:

  • <name>- 插件的名称,Maven NNN Plugin用于托管在 Maven 项目中的插件或NNN Maven 插件用于所有其他插件
  • <description>- 项目描述,插件可以做什么的概述
  • <url>- 插件的站点,通常是maven.apache.orgorg.mojohaus
  • <prerequisites>- 使用此插件所需的最低 Maven 版本
  • <issueManagement>- 描述用于报告问题和修改请求的系统
      [...]
      <issueManagement>
        <system>jira</system>
        <url>http://jira.someproject.org</url>
      </issueManagement>    
      [...] 
  • <inceptionYear>- 首次创建插件的年份
  • <mailingLists>- 列出可以联系其他用户或开发人员寻求帮助和讨论的地方
      [...]
      <mailingLists>
        <mailingList>
          <name>Project users</name>
          <post>announce@noonecares.com</post>
          <subscribe>users-subscribe@noonecares.com</subscribe>
          <unsubscribe>users-unsubscribe@noonecares.com</unsubscribe>
          <archive>http://noonecares.archive.org</archive>
        </mailingList>    
        <mailingList>
          [...]
        </mailingList>
      </mailingLists>    
      [...] 
  • <licenses>- 插件许可证
      [...]
      <licenses>
        <license>
          <name>Apache License, Version 2.0</name>
          <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
          <distribution>repo</distribution>
        </license>
      </licenses>
      [...]
  • <scm>- 源代码管理配置 - 没有这个的插件会引起怀疑,可能不是 OSS
      [...]
      <scm>
        <connection>scm:svn:http://noonecares.com/some/plugin/project/trunk</connection>
        <developerConnection>scm:svn:https://noonecares.com/some/plugin/project/trunk</developerConnection>
        <url>http://noonecares.com/viewvc/some/project/trunk/</url>
      </scm>
      [...]
  • <organization>- 维护插件的组织,以防我们需要指责
      [...]
      <organization>
        <name>Noone Care Software Foundation</name>
        <url>http://noonecare.org/</url>
      </organization> 
      [...]

插件配置参数

Maven Plugin Plugin 负责生成 Plugin Info 站点,需要添加到该<reporting>部分,除非它已经从父 POM 继承:

  [...]
  <reporting>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-plugin-plugin</artifactId>
        <version>2.5.1</version>
      </plugin>
    </plugins>
  </reporting>    
  [...]  

注释、注释和插件参数名称从插件源中提取并呈现在插件信息页面中。为了使生成的站点有用,这里有一些指南,您可以在记录插件时遵循。

  • 所有@parameter字段都应该有一个描述性的注释,信息量足够大,即使是普通用户也能理解
        [...]
        /**
         * Put something informative here that a regular user can understand.
         * 
         * @parameter 
         */
        private boolean someparameter;
        [...]
  • 班级级别的评论应该解释目标的作用
    [...]
    /**
     * Everything here will show up on the top of the generated plugin info page.
     *
     * @goal somegoal
     * @phase compile
     */
    public class ExampleMojo
        extends AbstractWarMojo
    {
        public void execute()
            throws MojoExecutionException, MojoFailureException
        {  
    [...]
  • 和参数不需要有任何评论,但提供一个仍然是一个好@component习惯@readonly

网站组织

信息的可见性也很重要,拥有统一的导航链接将大大提高文档的可见性。索引页面还可以帮助强调插件文档的重要部分和页面。

站点描述符

站点描述符描述了导航链接,可以在src/site/site.xml. 以下是建议的站点描述符模板。

<?xml version="1.0" encoding="UTF-8"?>
<project>
  <body>
    <menu name="Overview">
      <item name="Introduction" href="index.html"/>
      <item name="Goals" href="plugin-info.html"/>
      <item name="Usage" href="usage.html"/>
      <item name="FAQ" href="faq.html"/>
    </menu>
   
    <menu name="Examples">
      <item name="description1" href="examples/example-one.html"/>
      <item name="description2" href="examples/example-two.html"/>
    </menu>
  </body>
</project>
导航链接
  • 介绍

    简介是插件文档的首页。这是放置任何需要强调的部分和页面的好地方。也建议将生成的插件参数配置链接到这里。下面是推荐的src/site/apt/index.apt模板

     ------
     Introduction
     ------
     Author
     ------
     YYYY-MM-DD
     ------
    
    
    Plugin Name
    
      Plugin introduction, description, and other relevant information.
    
    * Goals Overview
    
      General information about the goals.
    
      * {{{<goal>.html}prefix:goal}} short description for this plugin goal.
    
    * Usage
    
      General instructions on how to use the Plugin Name can be found on the {{{usage.html}usage page}}. Some more
      specific use cases are described in the examples given below. Last but not least, users occasionally contribute
      additional examples, tips or errata to the
      {{{http://docs.codehaus.org/display/MAVENUSER/Plugin+Name}plugin's wiki page}}.
    
      In case you still have questions regarding the plugin's usage, please have a look at the {{{faq.html}FAQ}} and feel
      free to contact the {{{mailing-lists.html}user mailing list}}. The posts to the mailing list are archived and could
      already contain the answer to your question as part of an older thread. Hence, it is also worth browsing/searching
      the {{{mailing-lists.html}mail archive}}.
    
      If you feel like the plugin is missing a feature or has a defect, you can fill a feature request or bug report in our
      {{{issue-management.html}issue management system}}. When creating a new issue, please provide a comprehensive description of your
      concern. Especially for fixing bugs it is crucial that the developers can reproduce your problem. For this reason,
      entire debug logs, POMs or most preferably little demo projects attached to the issue are very much appreciated.
      Of course, patches are welcome, too. Contributors can check out the project from our
      {{{scm.html}source repository}} and will find supplementary information in the
      {{{/guides/development/guide-helping.html}guide to helping with Maven}}. 
    
    * Examples
    
      To provide you with better understanding of some usages of the Plugin Name,
      you can take a look into the following examples:
    
      * {{{./examples/example-one.html}Example Description One}}
    
      * {{{./examples/example-two.html}Example Description Two}}
     
  • 目标

    plugin-info.html由 Maven Plugin Plugin 生成。在 Maven 站点插件更新之前,最好将其拉出到主菜单以获得更大的可见性。这包含目标及其描述以及配置参数的链接。该信息基于插件的注释和注释。

  • 用法(以前称为 Howto)

    使用页面描述了插件目标的基本用例,其中包括示例 POM 配置和目标如何工作的解释。

  • 常问问题

    一个有据可查的项目总是整理常见问题,这些问题通常位于src/site/fml/faq.fml. 以下示例为您的常见问题解答提供了模板:

    <?xml version="1.0" encoding="UTF-8"?>
    <faqs id="FAQ" title="Frequently Asked Questions">
      <part id="General">
        <faq id="question">
          <question>Question?</question>
          <answer>
            <p>
              Answer
            </p>
          </answer>
        </faq>
      </part>
    </faqs>
  • 例子

    使用页面中未涵盖的高级配置和示例位于此处。想要最大限度地使用插件的高级用户可以在这里查看项目。关于如何有效使用插件的提示也是一个好东西放在这里。

    有关“示例”下的项目示例,请查看以下插件站点:

推荐的配置报告

有 2 个推荐的报告插件来增强插件文档,Javadoc 和 JXR。

  • Maven Javadoc 插件

    Javadocs 提供的文档使开发人员更容易了解如何使用特定的类。开发人员无需阅读和理解实际的源代码,而是可以使用 Javadocs 来查找类属性和方法。

    要为您的插件启用 javadoc,请将以下内容添加到您的pom.xml

      [...]
      <build>
        [...]
      </build>
      <reporting>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-javadoc-plugin</artifactId>
            <version>2.4</version>
            <configuration>
              <minmemory>128m</minmemory>
              <maxmemory>512</maxmemory>
              ...
            </configuration>
          </plugin>
        </plugins>
        [...]
      </reporting>   
      [...]

    检查有关插件javadoc:javadoc目标的文档以了解高级配置。

  • Maven JXR 插件

    Maven JXR 插件生成项目源的交叉引用。如果生成了 javadoc,则生成的交叉引用也链接到相应的 javadoc。交叉引用非常适合那些想要更好地了解插件内部工作的人。

    要启用源代码交叉引用,请将以下内容添加到您的pom.xml

      [...]
      <build>
        [...]
      </build>
      <reporting>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jxr-plugin</artifactId>
            <version>2.1</version>
          </plugin>
        </plugins>
      </reporting>    
      [...]  

    检查JXR 配置页面以获取可能的配置参数。