【问题标题】:Maven javadoc plugin - how can I include only certain classes?Maven javadoc 插件 - 我怎样才能只包含某些类?
【发布时间】:2010-11-14 19:16:48
【问题描述】:

使用 Maven javadoc 插件,您可以排除某些包 - 但我有很多包,只有少数几个我想为其生成 Javadoc。

有没有办法包含而不是排除?

我也想在类级别而不是包级别上做事,因为我的包中有一些类需要 javadoc 而有些则不需要。

【问题讨论】:

    标签: java maven-2 javadoc maven-plugin


    【解决方案1】:

    从 maven-javadoc-plugin 2.9 版开始,您可以在配置中执行此操作:

    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-javadoc-plugin</artifactId>
      <version>2.9</version>
      <configuration>
        ....
        <sourceFileIncludes>
          <include>Foo.java</include>
          <include>Bar.java</include>
        </sourceFileIncludes>
        <sourcepath>${basedir}/src/main/java/path/to/foo-and-bar</sourcepath>
        ....
      </configuration>
      ....
    

    ... 这将构建一个仅包含上述类的 Javadoc 站点。

    【讨论】:

    【解决方案2】:

    使用maven-javadoc-plugin,您不能指定特定的java 类(尽管您可以使用javadoc 实用程序,见下文)。但是,通过 javadoc:javadoc 目标的sourcepath 配置选项,您可以配置特定的包。一个例子如下:

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-javadoc-plugin</artifactId>
        <version>2.5</version>
        <configuration>
            <charset>UTF-8</charset>
            <docencoding>UTF-8</docencoding>
            <docfilessubdirs>true</docfilessubdirs>
            <links>
                <link>http://java.sun.com/j2se/1.5.0/docs/api/</link>
            </links>
            <show>protected</show>
            <source>1.5</source>
            <sourcepath>${basedir}/src/main/java/com/acme/foo</sourcepath>
        </configuration>
        <reportSets>
            <reportSet>
                <reports>
                    <report>javadoc</report>
                </reports>
            </reportSet>
        </reportSets>
    </plugin>
    

    在本例中,com.acme.foo 包(包括子包)下的所有类都会生成 javadoc。

    需要注意的是,这个 Maven 插件只是 Sun's javadoc utility 的一个包装器。因此,javadoc 的大部分文档和配置都适用于这个插件。请参阅 Sun 在 javadoc sourcepath parameter 上的文档。

    在 maven-javadoc-plugin 功能不同的地方,Sun 的 sourcepath 参数文档提到可以使用 javadoc 实用程序 generate javadoc for specific classes。 maven-javadoc-plugin 不提供此功能。 Sun 的文档中显示了一个示例:

      C:> cd C:\home\src\java\awt
      C:> javadoc -d C:\home\html Button.java Canvas.java Graphics*.java
    

    【讨论】:

    • 一个例子会添加到这个答案中。
    • 根据您的要求添加的示例。在编写示例时,我意识到我最初的答案是不正确的。我已经修改了它。随意将错误记录到 maven-javadoc-plugin 请求增强以支持为特定类生成 javadoc,因为它由 javadoc 实用程序支持。 jira.codehaus.org/browse/MJAVADOC
    • 可以使用 sourceFileIncludes 元素将 maven-javadoc-plugin 配置为仅包含特定文件。
    【解决方案3】:

    很简单,当你使用来自 Maven2-Plugin 的配置标签 &lt;subpackages/&gt; 时,例如:

        <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-javadoc-plugin</artifactId>
        <version>2.7</version>
        <configuration>
            <sourceEncoding>ISO-8859-1</sourceEncoding>
            <quiet>true</quiet>
            <aggregate>true</aggregate>
            <code>javadoc:aggregate</code>
            <code>javadoc:test-aggregate</code>         
            <doclet>gr.spinellis.umlgraph.doclet.UmlGraphDoc</doclet>
            <docletArtifact>
                <groupId>gr.spinellis</groupId>
                <artifactId>UmlGraph</artifactId>
                <version>4.6</version>
            </docletArtifact>
            <additionalparam>
                -inferrel -inferdep -quiet -hide java.*
                -collpackages java.util.* -qualify
                -postfixpackage -nodefontsize 9
                -nodefontpackagesize 7                          
            </additionalparam>
    
            <subpackages>
                de.interforum.gms.db.domain:de.interforum.sdr.db.domain
            </subpackages>
    
        </configuration>
        <executions>
          <execution>
            <goals>
              <goal>javadoc</goal>
              <goal>test-javadoc</goal>
            </goals>
            <phase>site</phase>
            <configuration>
              <!-- Specific configuration for the given reports ... -->
            </configuration>
          </execution>
        </executions>
    </plugin>
    

    【讨论】:

    • Maven2 命令为:mvn -cpu -up -am -pl subProject clean javadoc:aggregate
    【解决方案4】:

    最后,我使用sourcepath 配置选项指定了两个包含我想要Javadoc 的类的包,并在这些包中提供了我不想Javadoc 默认访问的类。将show 配置选项设置为public 允许我通过设置对public 的访问来选择为哪些类生成Javadoc。完整配置如下:

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-javadoc-plugin</artifactId>
        <configuration>
            <links>
                <link>http://java.sun.com/j2se/1.5.0/docs/api/</link>
            </links>
            <source>1.5</source>
            <show>public</show>
            <doctitle>Foo API</doctitle>
            <title>Foo API</title>
            <bottom><![CDATA[Copyright notice]]></bottom>
            <sourcepath>${basedir}/src/main/java/com/foo/api;${basedir}/src/main/java/com/bar/api</sourcepath>
        </configuration>
    </plugin>
    

    但是,这本质上是一种解决方法,我非常同意 shek 的评论,即这应该是对 maven-javadoc-plugin 的增强,因为它由 javadoc 实用程序支持。 http://jira.codehaus.org/browse/MJAVADOC

    【讨论】:

    • 请注意以下 RCross 的回答。这是 OP 要求的确切修复,尽管添加的日期比接受的答案晚得多。
    • 是的,在 2012 年 9 月,maven-javadoc-plugin 添加了执行此操作的功能,在提交接受的答案几年后!
    【解决方案5】:

    据我所知,您只能在包级别进行过滤。然而,Javadoc 只为公共和受保护的类型生成。如果这些类型是默认范围的或私有的,则不会为它们生成 javadoc。将它们设置为默认范围意味着它们仍然对包中的其他类型可见。如果您不想要 javadoc,您可能不希望人们使用这些类型,所以无论如何这可能是一个很好的范围。

    excludePackageNames 配置允许使用通配符。因此,只要您有一个允许这样做的包名称约定,您就可以排除大多数包。

    假设你有这些包。

    com.foo
    com.foo.api
    com.foo.internal   
    com.foo.internal.core
    com.foo.internal.util
    com.foo.internal.ui
    com.foo.ui
    

    而您只想公开 foo、foo.api 和 foo.ui,这种模式可以工作:

    <excludePackageNames>com.foo.internal.*:com.foo.bob</excludePackageNames>
    

    您也可以将有问题的类型移动到单独的包中,但这不是这样做的好理由。

    为这些类型生成 javadoc 有什么问题?

    【讨论】:

    • 虽然您可能对是否需要只为特定类指定 javadoc 提出质疑,但可以将 maven-javadoc-plugin 配置为只为特定类生成 javadoc。请参阅下面的答案。
    • Rich -- 随意删除您的 +1。在提出示例配置时,我意识到 maven-javadoc-plugin 并不支持 javadoc 实用程序的所有功能。所以,我开枪了。我确实添加了一个关于如何配置插件以仅包含特定包的示例,我相信这是对您排除特定包的答案的一个很好的补充。也为你 +1。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-22
    相关资源
    最近更新 更多