我正在尝试使用@link
选项链接到javadoc.io(特别是PowerMock的Javadocs)上托管的一些Javadoc。我试图将PowerMock的Javadocs的URL添加到我的-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/
没有不行。
答案 0 :(得分:6)
从命令行使用-J-Dhttp.agent=javadoc
等参数。
在Maven中,使用以下内容:
<additionalJOption>-J-Dhttp.agent=maven-javadoc-plugin-${pom.name}</additionalJOption>
背景:正如Danilo Pianini在another answer中建议的那样,问题是User-Agent
标题。但是,问题不在于空 User-Agent
; it's the default 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
文件并告诉Javadoc从磁盘读取它,它也适用于package-list
。 ,如果您使用-linkoffline
但是告诉Javadoc从package-list
网址抓取javadoc.io
(这是一件不寻常的事情),it may fail。问题:Maven尝试预先 - 验证package-list
文件,但在某些版本的Java下失败,因为它拒绝了javadoc.io
的SSL证书,这是Javadoc自己接受的证书。)
(哦,显而易见的是使用专门来自static.javadoc.io
的网址,而不是javadoc.io
。此外,我建议使用https
,而不是http
, case http://static.javadoc.io
有一天会开始向https://static.javadoc.io
发送重定向到Javadoc currently doesn't handle such redirects。另外,https
是件好事:))
答案 1 :(得分:4)
很奇怪:我可以在浏览器中看到,例如http://static.javadoc.io/org.pegdown/pegdown/1.6.0/package-list但是当我将http://static.javadoc.io/org.pegdown/pegdown/1.6.0
添加为javadoc&#39; link
选项时,它会说
获取网址时出错: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>
答案 2 :(得分:4)
我已经调查了这个问题,这里的问题是必须设置用户代理(空字符串没问题)才能成功连接到javadoc.io。
我解决了这个问题并为那些依赖该构建系统的人写了a Gradle plugin that may be of help。
不幸的是,解决方法无法移植到常规javadoc -link
命令调用。
答案 3 :(得分:1)
I am running javadoc.io.
This is reported as this github issue and it's solved just now. There is no need to override user agent string any more.
Feel free to re-open github issue if things are still not working. This thread is not actively monitored.
curl -I -A "Java/1.6.0_14" https://static.javadoc.io/org.checkerframework/checker-qual/2.2.2/package-list
HTTP/1.1 200 OK
Date: Mon, 08 Apr 2019 13:06:04 GMT
Content-Type: text/plain