使用Javadoc -link选项链接到javadoc.io

时间:2015-11-23 08:09:07

标签: java javadoc

我正在尝试使用@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/没有不行。

4 个答案:

答案 0 :(得分:6)

从命令行使用-J-Dhttp.agent=javadoc等参数。

在Maven中,使用以下内容:

<additionalJOption>-J-Dhttp.agent=maven-javadoc-plugin-${pom‌​.name}</additionalJO‌​ption>

背景:正如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

我使用下一个解决方法:

  1. 使用maven-dependency-plugin取消所需依赖项的javadoc。
  2. 将其与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