Maven javadoc插件 - 我怎么才能只包含某些类?

时间:2009-07-28 17:49:42

标签: java maven-2 javadoc maven-plugin

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

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

我还想在类级别而不是包级别上执行操作,因为我在一个包中需要javadoc的一些类和一些不需要的类。

5 个答案:

答案 0 :(得分:15)

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

答案 1 :(得分:14)

使用maven-javadoc-plugin,您无法指定特定的java classess(尽管您可以使用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的大多数文档和配置都适用于此插件。请参阅有关javadoc sourcepath parameter的Sun的文档。

在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

答案 2 :(得分:7)

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

    <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>

答案 3 :(得分:5)

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

答案 4 :(得分:1)

据我所知,您只能在包级别进行过滤。但是,Javadoc仅为公共类型和受保护类型生成。如果类型是默认范围或私有类型,则不会为它们生成javadoc。使它们成为默认范围意味着它们仍然可以被包中的其他类型看到。如果你不想要javadoc,你可能不希望人们使用这些类型,所以这可能是一个很好的范围。 / p>

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有什么问题?