使用 Maven javadoc 插件,您可以排除某些包 - 但我有很多包,只有少数几个我想为其生成 Javadoc。
有没有办法包括而不是排除?
我还想在类级别而不是包级别上做事,因为我在包中有一些需要 javadoc 的类和一些不需要。
使用 Maven javadoc 插件,您可以排除某些包 - 但我有很多包,只有少数几个我想为其生成 Javadoc。
有没有办法包括而不是排除?
我还想在类级别而不是包级别上做事,因为我在包中有一些需要 javadoc 的类和一些不需要。
从 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 站点。
使用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
很简单,当您使用<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>
最后,我使用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
据我所知,您只能在包级别进行过滤。然而,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 有什么问题?