使用Maven javadoc插件可以排除某些包 - 但是我有很多包,只有少数几个我想要生成Javadoc的类。
有没有办法包括而不是排除?
我还想在类级别而不是包级别上执行操作,因为我在一个包中需要javadoc的一些类和一些不需要的类。
答案 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有什么问题?