Связывание с javadoc.io с использованием опции Javadoc -link
Я пытаюсь связать некоторые Javadocs, размещенные в javadoc.io(в частности, PowerMock Javadocs), используя параметр @link
. Я попытался добавить URL-адрес PowerMock Javadocs в свой флаг -link
, но Javadoc не может его распознать. Я использую внешние ссылки на другие Javadocs просто отлично (например, Guava, Java SE 7) с Gradle в качестве моей системы сборки. Я пробовал следующие варианты:
-link http://static.javadoc.io/org.powermock/powermock-core/1.6.3/
^ Я подтвердил, что в этом каталоге есть файл package-list
-link http://static.javadoc.io/org.powermock/powermock-core/
-link http://javadoc.io/doc/org.powermock/powermock-core/1.6.3/
-link http://javadoc.io/doc/org.powermock/powermock-core/
Все они приводят к следующей ошибке (соответственно изменился URL):
javadoc: warning - Error fetching URL: http://static.javadoc.io/org.powermock/powermock-core/1.6.3/
Есть ли у кого-нибудь советы о том, как сделать эту работу?
Насколько я могу судить, это какая-то специфическая проблема javadoc.io, хотя, вероятно, проблема использования на моем конце - например, я в настоящее время использую -link http://junit.org/javadoc/latest/
без проблем, но -link http://static.javadoc.io/junit/junit/4.12/
не работает.
Ответы
Ответ 1
В командной строке используйте аргумент типа -J-Dhttp.agent=javadoc
.
В Maven используйте что-то вроде:
<additionalJOption>-J-Dhttp.agent=maven-javadoc-plugin-${pom.name}</additionalJOption>
Фон: как Данило Пианини предлагает в еще один ответ, проблема заключается в заголовке User-Agent
. Однако проблема не пустая User-Agent
; это стандартная Java User-Agent
, которая выглядит примерно так: Java/1.8.0_112
":
$ URL=https://static.javadoc.io/org.checkerframework/checker-qual/2.2.2/package-list
# default Java User-Agent:
$ wget -U Java/1.8.0_112 "$URL" 2>&1 | grep response
HTTP request sent, awaiting response... 403 Forbidden
# no User-Agent:
$ wget -U '' "$URL" 2>&1 | grep response
HTTP request sent, awaiting response... 200 OK
# custom User-Agent:
$ wget -U javadoc "$URL" 2>&1 | grep response
HTTP request sent, awaiting response... 200 OK
Итак, исправление заключается в том, чтобы сообщить Javadoc использовать другой User-Agent
. Java не позволит вам опустить User-Agent
, поэтому вам нужно будет предоставить значение, которое Java добавит к своему агенту по умолчанию.
Насколько я могу судить, блокировка Javadoc не является преднамеренной: Javadoc просто (возможно, неразумно) использует стандартную Java User-Agent
, а сеть доставки контента, которая javadoc.io
использует блоки, которые по умолчанию.
(Еще одно замечание о Maven: все работает отлично с -link
. Он также отлично работает с -linkoffline
, если вы загрузите файл package-list
и скажите Javadoc прочитать его с диска. Однако, если вы используете -linkoffline
, но сообщите Javadoc, чтобы получить package-list
из URL javadoc.io
(это необычная вещь), он может выйти из строя. Проблема: Maven пытается предварительно проверить файл package-list
, но, в некоторых версиях Java, терпит неудачу, потому что он отвергает сертификат SSL javadoc.io
, сертификат, который сам принимает Javadoc.)
(О, и, как представляется, важно использовать URL-адрес специально из static.javadoc.io
, а не javadoc.io
. Кроме того, я бы рекомендовал https
, а не http
, в случае, если http://static.javadoc.io
когда-нибудь начнет выдавать перенаправления до https://static.javadoc.io
, так как Javadoc в настоящее время не обрабатывает такие переадресации. Кроме того, https
- это хорошо:))
Ответ 2
Я исследовал проблему, проблема в том, что пользовательский агент должен быть установлен (пустая строка в порядке), чтобы соединение с javadoc.io завершилось успешно.
Я работал над проблемой и писал плагин Gradle, который может быть полезен для тех, кто полагается на эту систему сборки.
К сожалению, работа вокруг не может быть перенесена на обычный вызов команды javadoc -link
.
Ответ 3
Странно: я мог видеть в браузере, например. http://static.javadoc.io/org.pegdown/pegdown/1.6.0/package-list, но когда я добавляю http://static.javadoc.io/org.pegdown/pegdown/1.6.0
как параметр javadoc link
, он говорит
Ошибка получения URL-адреса: http://static.javadoc.io/org.pegdown/pegdown/1.6.0/package-list
Я использую следующее обходное решение:
- С
maven-dependency-plugin
распаковать javadoc желаемой зависимости.
-
Свяжите его с опцией linkoffline
.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.8</version>
<executions>
<execution>
<id>unpack-javadoc</id>
<phase>package</phase>
<goals>
<goal>unpack</goal>
</goals>
<configuration>
<artifactItems>
<artifactItem>
<groupId>org.pegdown</groupId>
<artifactId>pegdown</artifactId>
<classifier>javadoc</classifier>
<version>${pegdownVersion}</version>
<overWrite>false</overWrite>
<outputDirectory>${project.build.directory}/pegdown-javadoc</outputDirectory>
</artifactItem>
</artifactItems>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<configuration>
<links>
<link>http://www.slf4j.org/apidocs/</link>
</links>
<offlineLinks>
<offlineLink>
<url>http://static.javadoc.io/org.pegdown/pegdown/${pegdownVersion}</url>
<location>${project.build.directory}/pegdown-javadoc</location>
</offlineLink>
</offlineLinks>
</configuration>
</plugin>
Ответ 4
В итоге я использовал -linkoffline
, чтобы обойти эту проблему, которая, как я полагаю, обладает хорошим свойством не нуждаться в подключении к Интернету во время сборки, хотя если кто-нибудь еще подумает о том, как сделать эту работу с -link
я Все уши.