Подтвердить что ты не робот

Плагин Maven javadoc - как я могу включить только определенные классы?

Используя плагин Maven javadoc, вы можете исключить определенные пакеты, но у меня много пакетов и только несколько классов, для которых я хочу создать Javadoc.

Есть ли способ включить, а не исключать?

Я также хотел бы сделать что-то на уровне класса, а не на уровне пакета, поскольку у меня есть некоторые классы в пакете, которые нуждаются в javadoc, а некоторые нет.

4b9b3361

Ответ 1

В конце я использовал параметр конфигурации sourcepath, чтобы указать два пакета, содержащие классы, которые я хотел использовать Javadoc, и дал классы в тех пакетах, которые я не хотел использовать для доступа по умолчанию Javadoc. Настройка параметра конфигурации show для общественности позволила мне выбрать, какие классы 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-плагина, поскольку оно поддерживается утилитой javadoc. http://jira.codehaus.org/browse/MJAVADOC

Ответ 2

Так как 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, включая упомянутые классы.

Ответ 3

Используя maven-javadoc-plugin, вы не можете указать конкретную класс java (хотя вы можете использовать утилиту javadoc, см. ниже). Однако, используя опцию sourcepath для цели javadoc: javadoc, вы можете настроить определенные пакеты. Пример этого следует:

<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 для generate javadoc для конкретных классов. Эта возможность недоступна с помощью maven-javadoc-plugin. Пример этого показан в документации Sun:

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

Ответ 4

Это просто, когда вы используете тег конфигурации <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>

Ответ 5

Насколько я знаю, вы можете фильтровать только на уровне пакета. Однако 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 для этих типов?