2009-07-28 9 views
18

Używając plugin javadoc Maven możesz wykluczyć pewne pakiety - ale mam dużo pakietów i tylko garść klas, dla których chcę utworzyć Javadoc.Wtyczka Maven Javy - jak mogę uwzględnić tylko niektóre klasy?

Czy istnieje sposób włączenia, a nie wykluczenia?

Chciałbym również robić rzeczy na poziomie klasy, a nie na poziomie pakietu, ponieważ mam kilka klas w pakiecie, które wymagają javadoc, a niektóre nie.

Odpowiedz

5

W końcu użyłem opcji sourcepath konfiguracji, aby określić dwa pakiety zawierające klas chciałem Javadoc i dał zajęcia w tych pakietów, które nie chcą Domyślny dostęp Javadoc. Ustawienie opcji konfiguracji na publiczną pozwoliło mi wybrać, które klasy Javadoc były produkowane, ustawiając tam dostęp do publiczności.Pełna konfiguracja poniżej:

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

Jednak jest to w istocie obejście i zdecydowanie zgadzam się z komentarzem szek, że powinno to być enchancement przeciwko maven-javadoc plugin, ponieważ jest obsługiwany przez narzędzie javadoc. http://jira.codehaus.org/browse/MJAVADOC

+0

Uwaga RCross "odpowiedź poniżej. Jest to dokładna poprawka do żądanego OP, aczkolwiek dodana w terminie dużo późniejszym niż zaakceptowana odpowiedź. –

+0

Tak, możliwość zrobienia tego została dodana do wtyczki maven-javadoc we wrześniu 2012 roku, kilka dobrych lat po zaakceptowaniu zaakceptowanej odpowiedzi! – RCross

1

O ile wiem, można filtrować tylko na poziomie pakietu. Jednak Javadoc jest generowany tylko dla typów publicznych i chronionych. Jeśli typy mają zasięg domyślny lub prywatny, nie będą dla nich generowane javadoc. Ustawienie ich na domyślne oznacza, że ​​są one nadal widoczne dla innych typów w pakiecie. Jeśli nie chcesz, aby javadoc, prawdopodobnie nie chcesz, aby ludzie używali tych typów, więc jest to prawdopodobnie dobry zakres, aby mimo wszystko.

Konfiguracja excludePackageNames zezwala na stosowanie symboli wieloznacznych. Dopóki masz konwencję nazw pakietów, która pozwala na to, możesz wykluczyć większość pakietów.

Powiedz, że masz te pakiety.

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

i chcesz tylko wystawiać Foo foo.api i foo.ui, ten wzór będzie działać:

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

Można alternatywnie poruszać typy naruszające na oddzielne pakiety, ale nie jest to dobry powód, aby to zrobić.

Na czym polega problem z generowaniem javadoc dla tych typów?

+0

Chociaż możesz być na dobrej drodze, aby zakwestionować potrzebę określenia tylko javadoc dla określonych klas, możliwe jest skonfigurowanie wtyczki maven-javadoc, aby generować tylko javadoc dla określonych klas. Zobacz moją odpowiedź poniżej. – shek

+0

To fajne, ucz się czegoś każdego dnia. +1 do Ciebie sir –

+0

Rich - możesz usunąć swój +1. Przy opracowywaniu przykładowej konfiguracji zdałem sobie sprawę, że wtyczka maven-javadoc nie honoruje całej funkcjonalności narzędzia javadoc. Więc skoczyłem z pistoletu. Dodałem przykład, jak skonfigurować wtyczkę tak, aby zawierała tylko określone pakiety, co moim zdaniem stanowi miłe uzupełnienie Twojej odpowiedzi na temat wykluczania określonych pakietów. +1 do Ciebie również. – shek

14

Korzystanie z maven-javadoc-plugin, nie można określić konkretnych klas java (choć można za pomocą narzędzia javadoc, patrz poniżej). Jednak za pomocą opcji konfiguracyjnej sourcepath dla celu javadoc: javadoc można skonfigurować określone pakiety. Przykładem tego następująco:

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

W tym przykładzie, wszystkie klasy pod com.acme.foo pakietu (w tym podpakiety) będą mieć javadoc generowane.

Należy zauważyć, że ta wtyczka Maven jest po prostu opakowaniem około Sun's javadoc utility. W związku z tym większość dokumentacji i konfiguracji dla javadoc jest prawdziwa dla tej wtyczki. Zobacz dokumentację Sun na javadoc sourcepath parameter.

W obszarze, gdzie wtyczka maven-javadoc różni się funkcjonalnością, dokumentacja Sun dotycząca parametru sourcepath wspomina, że ​​jest to możliwe z narzędziem javadoc do generate javadoc for specific classes. Ta funkcja nie jest dostępna z wtyczką maven-javadoc. Przykładem tego jest przedstawiony w dokumentacji firmy Sun:

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

Przykład dodaje do tej odpowiedzi. – Supertux

+1

Przykład dodany na żądanie. Pisząc ten przykład, zdałem sobie sprawę, że moja pierwotna odpowiedź nie była poprawna. Od tego czasu go zmodyfikowałem. Możesz zaimportować błąd do wtyczki maven-javadoc, prosząc o rozszerzenie do obsługi generowania javadoc dla określonych klas, ponieważ jest on obsługiwany przez narzędzie javadoc. http://jira.codehaus.org/browse/MJAVADOC – shek

+0

Możliwe jest skonfigurowanie wtyczki maven-javadoc w celu włączenia tylko określonych plików przy użyciu ['sourceFileIncludes'] (https://maven.apache.org/ wtyczki/maven-javadoc-plugin/javadoc-mojo.html # sourceFileIncludes) element. –

7

To po prostu, kiedy użyć tagu konfiguracji <subpackages/> z Maven2-plugin, np

<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

Komenda Maven2 to: 'mvn -cpu -up -am -pl subProject clean javadoc: agregat' – udoline

+0

Więcej szczegółów można znaleźć tutaj http://jira.codehaus.org/browse/MJAVADOC-82 – udoline

15

Od wersji Maven-javadoc-plugin 2.9, można to zrobić w konfiguracji:

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

... który zbuduje witrynę Javadoc wyłącznie z wymienionymi klasami.

+0

Dzięki za dodanie tego chociaż to zostało odebrane. Prawdopodobnie nie znalazłoby go, gdyby nie ta kolejna odpowiedź. –

+0

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

Powiązane problemy