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

使用javadoc-link选项链接到javadoc.io,java,javadoc,Java,Javadoc,我试图使用@link选项链接到javadoc.io上托管的一些javadoc(特别是PowerMock的Javadocs)。我试图将PowerMock的Javadocs的URL添加到我的-link标志中,但无法让Javadoc识别它。我使用Gradle作为构建系统,使用到其他Javadoc的外部链接(例如Guava、JavaSE7)。我尝试了以下几种选择: -链接http://static.javadoc.io/org.powermock/powermock-core/1.6.3/ ^我已确认此

我试图使用
@link
选项链接到javadoc.io上托管的一些javadoc(特别是PowerMock的Javadocs)。我试图将PowerMock的Javadocs的URL添加到我的
-link
标志中,但无法让Javadoc识别它。我使用Gradle作为构建系统,使用到其他Javadoc的外部链接(例如Guava、JavaSE7)。我尝试了以下几种选择:

-链接http://static.javadoc.io/org.powermock/powermock-core/1.6.3/

^我已确认此目录中有一个
包列表
文件

-链接http://static.javadoc.io/org.powermock/powermock-core/

-链接http://javadoc.io/doc/org.powermock/powermock-core/1.6.3/

-链接http://javadoc.io/doc/org.powermock/powermock-core/

所有这些都会导致以下错误(URL相应更改):

javadoc:警告-获取URL时出错:http://static.javadoc.io/org.powermock/powermock-core/1.6.3/

有没有人对如何使这项工作有效提出建议


据我所知,这是某种特定于javadoc.io的问题,尽管可能是我这边的一个使用问题-例如,我目前正在使用
-链接http://junit.org/javadoc/latest/
没有问题,但
-链接http://static.javadoc.io/junit/junit/4.12/
不起作用

我最终只是使用了
-linkoffline
来解决这个问题,我认为它的优点是在构建时不需要互联网连接,不过如果有人对如何使用
-link
实现这一点有进一步的想法,我洗耳恭听

这很奇怪:我可以在浏览器中看到,例如,但当我添加
http://static.javadoc.io/org.pegdown/pegdown/1.6.0
如javadoc的
链接所示

获取URL时出错:

我使用下一个解决方法:

  • 使用
    maven依赖插件
    unapack所需依赖的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>
    
    
    org.apache.maven.plugins
    maven依赖插件
    2.8
    解包javadoc
    包裹
    打开
    org.pegdown
    钉住
    javadoc
    ${pegdownVersion}
    假的
    ${project.build.directory}/pegdown javadoc
    org.apache.maven.plugins
    maven javadoc插件
    http://www.slf4j.org/apidocs/
    http://static.javadoc.io/org.pegdown/pegdown/${pegdownVersion}
    ${project.build.directory}/pegdown javadoc
    

  • 我已经调查了这个问题,这里的问题是必须设置一个用户代理(空字符串是可以的),以便成功完成到javadoc.io的连接

    我解决了这个问题,并为那些依赖该构建系统的人撰写了文章


    不幸的是,该解决方案无法移植到常规的
    javadoc-link
    命令调用。

    从命令行使用类似
    -J-Dhttp.agent=javadoc
    的参数

    在Maven中,使用类似以下内容:

    ,问题是
    用户代理
    标题。但是,问题不是一个空的
    用户代理
    ,它看起来像“
    Java/1.8.0\u 112
    ”:

    因此,修复方法是告诉Javadoc使用不同的
    用户代理。Java不允许您省略
    用户代理
    ,因此您必须提供一个值,Java将在其默认代理之前提供该值

    据我所知,Javadoc的阻塞并不是故意的:Javadoc只是(可能是不明智的)使用默认的Java
    User Agent
    ,而
    Javadoc.io
    的内容交付网络默认使用该阻塞

    (关于Maven还有一点需要注意:使用
    -link
    一切都很好。如果您下载
    包列表
    文件并告诉Javadoc从磁盘读取,则使用
    -linkoffline
    也很好。但是,如果您使用
    -linkoffline
    但告诉Javadoc从
    Javadoc.io
    URL获取
    包列表
    (这是一件不寻常的事情),。问题是:Maven试图预先验证
    包列表
    文件,但在某些版本的Java中失败,因为它拒绝了
    javadoc.io
    的SSL证书,这是一个javadoc本身接受的证书。)


    (哦,使用一个专门来自
    static.javadoc.io
    ,而不是
    javadoc.io
    ,而不是
    https
    ,这似乎很重要。此外,如果
    http://static.javadoc.io
    有一天开始向
    https://static.javadoc.io
    ,如Javadoc。另外,
    https是一件好事:)

    我正在运行javadoc.io

    这是这样报告的,现在已经解决了。不再需要重写用户代理字符串

    如果仍无法正常工作,请随时重新打开。此线程未被主动监视

    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
    

    也许运行带有
    -verbose
    选项的javadoc会给出一个提示,出了什么问题。不幸的是,除了:
    [ERROR][system.err]javadoc:warning-ERROR-fetching URL:http://static.javadoc.io/org.powermock/powermock-core/1.6.3/
    访问这些URL(
    static.javadoc.io
    版本)在浏览器中导致访问被拒绝的错误。Javadoc可能也有相同的结果。Javadoc确实尝试访问基本URL吗?您可以访问,而且很好。我也给Javadoc.io联系人发了电子邮件,希望这里的人有经验,因为(AFAIK)Javadoc.io是相当标准的
    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