2009-07-28 16 views
18

Utilizzando il plugin di javadoc Maven è possibile escludere alcuni pacchetti, ma ho molti pacchetti e solo una manciata di classi per cui voglio produrre Javadoc.Maven javadoc plugin - come posso includere solo alcune classi?

C'è un modo per includere piuttosto che escludere?

Vorrei anche fare cose a livello di classe piuttosto che a livello di pacchetto perché ho alcune classi in un pacchetto che richiede javadoc e altre no.

risposta

5

Alla fine ho usato l'opzione di configurazione sourcepath per specificare due pacchetti contenenti le classi che volevo Javadoc e ha dato lezioni di quei pacchetti che io non volevo Accesso predefinito Javadoc. L'impostazione dell'opzione di configurazione show in pubblico mi consentiva di scegliere le classi per cui Javadoc è stato prodotto impostando l'accesso al pubblico.Configurazione completa qui di seguito:

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

Tuttavia, questa è essenzialmente una soluzione e sono molto d'accordo con il commento di shek che questo dovrebbe essere un enchancement contro il Maven-javadoc-plugin in quanto è supportato dal programma di utilità javadoc. http://jira.codehaus.org/browse/MJAVADOC

+0

Nota Risposta RCross 'sotto. È la correzione esatta OP richiesta, anche se in una data molto più tardi della risposta accettata. –

+0

Sì, la possibilità di farlo è stata aggiunta a maven-javadoc-plugin nel settembre 2012, alcuni anni dopo che la risposta accettata è stata inviata! – RCross

1

Per quanto ne so, è possibile filtrare solo a livello di pacchetto. Tuttavia Javadoc viene generato solo per tipi pubblici e protetti. Se i tipi hanno un ambito predefinito o privato, non avranno generato javadoc per loro. Rendendoli con scope di default si intende che sono ancora visibili ad altri tipi nel pacchetto. Se non si desidera javadoc, probabilmente non si vuole che le persone usino questi tipi, quindi questo è probabilmente un buon margine per farlo comunque.

La configurazione excludePackageNames consente i caratteri jolly. Quindi, purché tu abbia una convenzione sul nome del pacchetto che consente questo, puoi escludere la maggior parte dei pacchetti.

Dire di avere questi pacchetti.

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

e desideri solo esporre foo, foo.api e foo.ui, questo modello funziona:

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

Si potrebbe in alternativa spostare i tipi di offendere in pacchetti separati, ma questo non è una buona ragione per farlo.

Qual è il problema con la generazione di javadoc per questi tipi?

+0

Mentre si può essere sulla strada giusta per mettere in discussione la necessità di specificare solo javadoc per classi specifiche, è possibile configurare il plugin di maven-javadoc per generare solo javadoc per classi specifiche. Vedi la mia risposta qui sotto. – shek

+0

è bello, impari qualcosa ogni giorno. +1 a voi sir –

+0

Rich - sentiti libero di rimuovere il tuo +1. Nel venire con la configurazione di esempio, mi sono reso conto che il plugin maven-javadoc non rispetta tutte le funzionalità dell'utilità javadoc. Quindi, ho saltato la pistola. Ho aggiunto un esempio su come configurare il plugin per includere solo pacchetti specifici, che credo sia un buon complemento alla tua risposta sull'esclusione di pacchetti specifici. +1 anche a te. – shek

14

Utilizzando lo maven-javadoc-plugin, non è possibile specificare classi di classe java specifiche (sebbene sia possibile utilizzare l'utilità javadoc, vedere di seguito). Tuttavia, tramite l'opzione di configurazione sourcepath per l'obiettivo javadoc: javadoc, è possibile configurare pacchetti specifici. Un esempio di questo segue:

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

In questo esempio, tutte le classi dal pacchetto com.acme.foo (compresi sottopacchetti) avranno generato javadoc.

Si noti che questo plug-in Maven è semplicemente un wrapper attorno allo Sun's javadoc utility. Come tale, la maggior parte della documentazione e della configurazione di javadoc è valida per questo plugin. Vedere la documentazione di Sun su javadoc sourcepath parameter.

In un'area in cui il plug-in maven-javadoc ha funzionalità diverse, la documentazione di Sun per il parametro sourcepath indica che è possibile con l'utilità javadoc su generate javadoc for specific classes. Questa funzionalità non è disponibile con il plug-in maven-javadoc. Un esempio di questo è mostrato nella documentazione della Sun:

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

Un esempio aggiungerebbe a questa risposta. – Supertux

+1

Esempio aggiunto per la richiesta. Nello scrivere l'esempio, ho realizzato che la mia risposta originale non era corretta. L'ho modificato da allora. Sentitevi liberi di registrare un bug nel plugin maven-javadoc che richiede un miglioramento per supportare la generazione di javadoc per classi specifiche poiché è supportato dall'utilità javadoc. http://jira.codehaus.org/browse/MJAVADOC – shek

+0

È possibile configurare il plug-in maven-javadoc per includere solo file specifici utilizzando il ['sourceFileIncludes'] (https://maven.apache.org/ elemento plugins/maven-javadoc-plugin/javadoc-mojo.html # sourceFileIncludees). –

7

E 'semplicemente, quando si utilizza il tag di configurazione <subpackages/> da Maven2-Plugin, ad esempio:

<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

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

+0

Per ulteriori dettagli, vedere qui http://jira.codehaus.org/browse/MJAVADOC-82 – udoline

15

Dal Maven-javadoc-plugin versione 2.9, è possibile fare questo nella configurazione:

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

... che creerebbe un sito Javadoc includendo solo le classi menzionate.

+0

Grazie per aver aggiunto questo anche se era stato risposto. Probabilmente non l'avrei trovato se non fosse stato per questa risposta di follow-up. –

+0

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

Problemi correlati