Maven javadoc插件-如何只包含某些类?

Maven javadoc插件-如何只包含某些类?,java,maven-2,javadoc,maven-plugin,Java,Maven 2,Javadoc,Maven Plugin,使用Maven javadoc插件,您可以排除某些包——但是我有很多包,只有少数几个类需要生成javadoc 有没有办法包括而不是排除 我还想在类级别而不是包级别上做事情,因为包中有些类需要javadoc,有些不需要javadoc。据我所知,您只能在包级别进行筛选。但是,Javadoc仅为公共和受保护类型生成。如果类型是默认范围的或私有的,则不会为它们生成javadoc。将它们设为默认作用域意味着它们对包中的其他类型仍然可见。如果您不想要javadoc,您可能不希望人们使用这些类型,因此这可能是

使用Maven javadoc插件,您可以排除某些包——但是我有很多包,只有少数几个类需要生成javadoc

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


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

据我所知,您只能在包级别进行筛选。但是,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
假设你有这些包裹

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>
com.foo.internal.*:com.foo.bob
您也可以将有问题的类型移动到单独的包中,但这不是这样做的好理由

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

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

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

最后,我使用
sourcepath
configuration选项指定了两个包,其中包含我想要Javadoc的类,并为那些包中我不想要Javadoc默认访问的类提供了类。将
show
configuration选项设置为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>

org.apache.maven.plugins

很简单,当您使用Maven2插件的配置标签时,例如:

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

由于maven javadoc插件版本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>
  ....

org.apache.maven.plugins
maven javadoc插件
2.9
....
Foo.java
java
${basedir}/src/main/java/path/to/foo和bar
....
....

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

虽然您可能会质疑只为特定类指定Javadoc的必要性,但可以将maven Javadoc插件配置为只为特定类生成Javadoc。请参阅下面我的答案。Rich--请随意删除您的+1。在给出示例配置时,我意识到maven javadoc插件并不支持javadoc实用程序的所有功能。所以,我跳了枪。我确实添加了一个关于如何配置插件以只包含特定包的示例,我相信这是对您关于排除特定包的回答的一个很好的补充+1也给你。一个示例将添加到此答案。示例将根据你的请求添加。在写这个例子时,我意识到我原来的答案是不正确的。后来我修改了它。请随意将一个bug记录到maven javadoc插件中,请求增强以支持特定类的javadoc生成,因为javadoc实用程序支持它。可以使用element将maven javadoc插件配置为仅包含特定文件。Maven2命令是:
mvn-cpu-up-am-pl子项目clean javadoc:aggregate
,感谢您添加了这个命令,尽管它已经得到了回答。如果没有这个后续的答案,可能不会找到它。相关:请注意下面RCross的答案。这正是OP所要求的修复,尽管添加的日期比接受的答案晚得多。是的,2012年9月,在接受的答案提交好几年后,maven javadoc插件添加了这一功能!