20

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

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

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

4

5 回答 5

17

从 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 站点。

于 2012-11-13T16:56:34.343 回答
15

使用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 的 javadoc 实用程序的一个包装器。因此,javadoc 的大部分文档和配置都适用于这个插件。请参阅 Sun 关于 javadoc sourcepath 参数的文档。

在 maven-javadoc-plugin 功能不同的地方,Sun 的 sourcepath 参数文档提到,使用 javadoc 实用程序可以为特定类生成 javadoc。maven-javadoc-plugin 不提供此功能。Sun 的文档中显示了一个示例:

  C:> cd C:\home\src\java\awt
  C:> javadoc -d C:\home\html Button.java Canvas.java Graphics*.java
于 2009-07-28T18:32:08.340 回答
7

很简单,当您使用<subpackages/>Maven2-Plugin 中的配置标签时,例如:

    <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>
于 2010-10-22T06:15:57.033 回答
6

最后,我使用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

于 2009-07-29T12:25:55.810 回答
1

据我所知,您只能在包级别进行过滤。然而,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 有什么问题?

于 2009-07-28T18:11:24.403 回答