2009-07-28 18 views
18

Al usar el plugin Maven javadoc puede excluir ciertos paquetes, pero tengo muchos paquetes y solo un puñado de clases para las que quiero producir Javadoc.Maven javadoc plugin - ¿cómo puedo incluir solo ciertas clases?

¿Hay alguna forma de incluir en lugar de excluir?

También me gustaría hacer cosas a nivel de clase en lugar de a nivel de paquete ya que tengo algunas clases en un paquete que necesitan javadoc y otras que no.

Respuesta

5

Al final he utilizado la opción de configuración sourcepath especificar dos paquetes que contienen las clases que quería Javadoc y di clases en aquellos paquetes que no quería Acceso predeterminado de Javadoc. Establecer la opción de configuración show en público me permitió elegir para qué clases Javadoc se creó al establecer el acceso al público.configuración completa a continuación:

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

Sin embargo, esto es esencialmente una solución y estoy totalmente de acuerdo con el comentario de shek que este debe ser un Enchancement contra el experto-javadoc-plugin, ya que se apoya en la utilidad javadoc. http://jira.codehaus.org/browse/MJAVADOC

+0

Observe la respuesta de RCross a continuación. Es la solución exacta que solicitó OP, aunque se agregó en una fecha mucho más tardía que la respuesta aceptada. –

+0

Sí, la capacidad de hacer esto se agregó a maven-javadoc-plugin en septiembre de 2012, ¡algunos años después de que se haya enviado la respuesta aceptada! – RCross

1

Por lo que sé, solo se puede filtrar a nivel de paquete. Sin embargo, Javadoc solo se genera para tipos públicos y protegidos. Si los tipos tienen un alcance predeterminado o privado, no tendrán generado javadoc para ellos. Hacerlos con un alcance predeterminado significa que todavía son visibles para otros tipos en el paquete. Si no quieres javadoc, probablemente no quieras que las personas usen esos tipos, por lo que este es probablemente un buen alcance para todos.

La configuración excludePackageNames permite comodines. Por lo tanto, siempre que tenga una convención de nombre de paquete que lo permita, puede excluir la mayoría de los paquetes.

Digamos que tiene estos paquetes.

com.foo 
com.foo.api 
com.foo.internal 
com.foo.internal.core 
com.foo.internal.util 
com.foo.internal.ui 
com.foo.ui 

y sólo desea exponer foo, foo.api y foo.ui, este patrón funciona:

<excludePackageNames>com.foo.internal.*:com.foo.bob</excludePackageNames> 

Se podía mover alternativamente los tipos infractores en paquetes separados, pero esto no es una buena razón para hacerlo.

¿Cuál es el problema con la generación de javadoc para estos tipos?

+0

Si bien puede estar en el camino correcto para cuestionar la necesidad de especificar solo javadoc para clases específicas, es posible configurar el maven-javadoc-plugin para generar solo javadoc para clases específicas. Ver mi respuesta a continuación. – shek

+0

eso es genial, aprendes algo todos los días. +1 a usted, señor –

+0

Rico: siéntase libre de eliminar su +1. Al presentar la configuración de ejemplo, me di cuenta de que el plugin maven-javadoc no respetaba todas las funciones de la utilidad javadoc. Entonces, salté el arma. Agregué un ejemplo sobre cómo configurar el complemento para incluir solo paquetes específicos, lo que creo es un buen complemento a su respuesta al excluir paquetes específicos. +1 a usted también. – shek

14

Usando el maven-javadoc-plugin, no puede especificar clases de java específicas (aunque puede hacerlo con la utilidad javadoc, vea a continuación). Sin embargo, a través de la opción de configuración sourcepath para el objetivo javadoc: javadoc, puede configurar paquetes específicos. Un ejemplo de esto sigue:

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

En este ejemplo, todas las clases en el marco del com.acme.foo paquete (incluyendo subpaquetes) tendrán Javadoc generado.

Cabe señalar que este plugin de Maven es simplemente una envoltura alrededor de Sun's javadoc utility. Como tal, la mayor parte de la documentación y configuración para javadoc se cumple para este complemento. Consulte la documentación de Sun en javadoc sourcepath parameter.

En un área donde el plugin maven-javadoc-plugin difiere en funcionalidad, la documentación de Sun para el parámetro sourcepath menciona que es posible con la utilidad javadoc a generate javadoc for specific classes. Esta capacidad no está disponible con el maven-javadoc-plugin. Un ejemplo de esto se muestra en la documentación del sol:

C:> cd C:\home\src\java\awt 
    C:> javadoc -d C:\home\html Button.java Canvas.java Graphics*.java 
+0

Un ejemplo se agregaría a esta respuesta. – Supertux

+1

Ejemplo agregado según su solicitud. Al escribir el ejemplo, me di cuenta de que mi respuesta original no era correcta. Lo he modificado desde entonces. No dude en registrar un error en maven-javadoc-plugin solicitando una mejora para admitir la generación de javadoc para clases específicas, ya que es compatible con la utilidad javadoc. http://jira.codehaus.org/browse/MJAVADOC – shek

+0

Es posible configurar el plugin maven-javadoc para incluir solo archivos específicos usando el ['sourceFileIncludes'] (https://maven.apache.org/ plugins/maven-javadoc-plugin/javadoc-mojo.html # sourceFileIncludes) elemento. –

7

Es simplemente, cuando se utiliza la etiqueta de configuración <subpackages/> de Maven2-Plugin, por ejemplo:

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

El comando Maven2 es: 'mvn -cpu -up -am -pl subProject clean javadoc: aggregate' – udoline

+0

Para obtener más información, consulte aquí http://jira.codehaus.org/browse/MJAVADOC-82 – udoline

15

Desde experto-javadoc-plugin versión 2.9, se puede hacer esto en su configuración:

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

... que construiría un sitio Javadoc que solo incluyera las clases mencionadas.

+0

Gracias por agregar esto aunque había sido respondido. Probablemente no lo habría encontrado si no fuera por esta respuesta de seguimiento. –

+0

relacionado: http://stackoverflow.com/questions/14518220/maven-how-do-i-exclude-specific-source-files-from-javadoc – Vince

Cuestiones relacionadas