Как заставить работать наследование javadoc для внешних API? (с Maven2) - PullRequest
7 голосов
/ 04 августа 2010

Когда класс переопределяет конкретный метод или реализует и абстрактный метод, Javadoc автоматически наследуется, если явно не перезаписан.

Или, по крайней мере, инструмент пытается это сделать. Кажется, это не работает для связанных внешних API. Например, когда я в своем коде реализую java.util.Map или что-то еще из JRE, javadocs не наследуются и не копируются из JRE javadocs / apidocs.

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

Моя конфигурация плагина Maven2 Javadoc в настоящее время выглядит следующим образом:

<reporting>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-javadoc-plugin</artifactId>
      <version>2.7</version>
      <configuration>
        <stylesheet>maven</stylesheet>
        <links>
          <link>http://download.oracle.com/javase/6/docs/api</link>
        </links>
      </configuration>
    </plugin>
  </plugins>
</reporting>

Есть какие-нибудь указатели о том, как заставить это работать?

Ответы [ 3 ]

6 голосов
/ 04 августа 2010

Как упоминалось @Stephen, исходный файл для унаследованного метода должен быть доступен и должен находиться по пути, указанному -sourcepath. Это объясняется в документации по инструменту Javadoc:

Автоматическое копирование комментариев метода

Инструмент Javadoc обладает способностью копировать или «наследовать» комментарии метода в классы и интерфейсы под следующие два обстоятельства. Конструкторы, поля и вложенные классы не наследуют комментарии к документу.

  • Автоматически наследовать комментарий для заполнения отсутствующего текста - Когда main описание или @return, Тег @param или @throws отсутствует из комментария метода, Javadoc инструмент копирует соответствующий основной описание или тег комментарий от метод, который переопределяет или реализует (если любой), согласно алгоритму ниже.

    Более конкретно, когда @param тег для конкретного параметр отсутствует, тогда комментарий для этого параметра копируется из метод дальше по наследству иерархия. Когда @throws тег для конкретное исключение отсутствует, @throws тег копируется только если объявлено исключение.

    Это поведение отличается от версии 1.3 и более ранних версий, где наличие какого-либо основного описания или тег помешает всем комментариям наследуется.

  • Явно наследуйте комментарий с тегом {@inheritDoc} - Вставьте встроенный тег {@inheritDoc} в основное описание метода или @return, @param или @throws комментарий тега - соответствующий унаследованный основной описание или комментарий тега копируется в это место.

Исходный файл для унаследованных метод должен быть только на пути указано -sourcepath для комментарий к документу, чтобы быть на самом деле доступно для копирования. Ни один класс ни его пакет должен быть передан в в командной строке. Это контрасты с 1.3.x и более ранними выпусками, где класс должен был быть задокументирован класс

Так что вам придется использовать <sourcepath> необязательный параметр конфигурации плагина javadoc (который по умолчанию содержит источники проекта).


Кстати, <links/> - это нечто иное, <links/> используются для добавления перекрестных ссылок на внешние проекты. И на самом деле, они не должны использоваться для JDK. От Настройка ссылок :

Начиная с версии 2.6, будет добавлена ​​ссылка на API Javadoc, в зависимости от версии JDK, используемой вашим проектом. Версия API Javadoc определяется по значению параметра <source/> в org.apache.maven.plugins:maven-compiler-plugin (определенном в ${project.build.plugins} или в ${project.build.pluginManagement}) или вычисляется с помощью исполняемый файл Javadoc Tool. Если вы хотите пропустить эту ссылку, вам нужно настроить <detectJavaApiLink/> на false.

Примечание: если вы используете неподдерживаемый JDK, такой как 7.0, вы можете добавить его URL Javadoc API с помощью параметра <javaApiLinks/>, т.е.

<configuration>
  <javaApiLinks>
    <property>
      <name>api_1.7</name>
      <value>http://download.java.net/jdk7/docs/api/</value>
    </property>
  </javaApiLinks>
  ...
</configuration>

См. Параметр <links/> для получения дополнительной информации.

При условии, что вы настроили уровень 1.6 source в плагине компилятора, перекрестные ссылки на Java API просто работают (ссылки указывают на http://download.oracle.com/javase/6/docs/api/),, для Java API добавить нечего.


Ни то, ни другое не работает для меня. Мне пришлось добавить раздел ссылок, чтобы заставить работать перекрестные ссылки.

Weird. Вы на самом деле указали уровень компилятора source, как описано? На всякий случай вот что у меня работает:

  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <configuration>
      <source>1.6</source>
      <target>1.6</target>
    </configuration>
  </plugin>
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-javadoc-plugin</artifactId>
    <version>2.7</version>
    <configuration>
      <!-- No need for this -->
      <!--
      <javaApiLinks>
        <property>
          <name>api_1.6</name>
          <value>http://download.oracle.com/javase/6/docs/api/</value>
        </property>
      </javaApiLinks>
      -->
      <links>
        <link>http://commons.apache.org/dbcp/apidocs/</link>
        <link>http://commons.apache.org/fileupload/apidocs/</link>
      </links>
    </configuration>
  </plugin>
1 голос
/ 04 августа 2010

Я не могу дать вам однозначный ответ, но я думаю, что недостающая часть головоломки состоит в том, что утилита javadoc должна иметь возможность найти исходный код соответствующих внешних API для javadoc наследство на работу.

0 голосов
/ 02 августа 2016

У меня был похожий вопрос о StackOverflow, который помог мне решить эту проблему лучше, чем принятый ответ на этот вопрос: maven-javadoc-plugin и inheritDoc для базовых классов API Java

Сводка: Чтобы унаследовать Javadoc от базовых классов Java, необходимо разархивировать их источники и включить их в сборку Javadoc.Источники базовых классов Java представлены в файле src.zip в дистрибутиве JDK.

...