Maven javadoc搜索重定向到“ /undefined/..”URL

时间:2018-09-14 06:46:32

标签: java maven search javadoc doc

我已经使用javadoc maven插件3.0.1和Java 9生成了Javadoc。但是,当我使用新的Search功能并选择一个类时,它会重定向到“找不到文件” ...

网址中有undefined(例如“ ../target/site/apidocs/undefined/com/mycompany/MyClass.html”),如果删除,则会正确加载页面。

能否请您帮我进行正确的配置以生成Java文档(摆脱此undefined),以便搜索功能可以很好地加载html页面?

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-javadoc-plugin</artifactId>
    <version>${version.maven-javadoc-plugin}</version>
        <executions>
            <execution>
                <id>javadoc</id>
                <goals>
                    <goal>javadoc</goal>
                </goals>
                <phase>prepare-package</phase>
                <configuration>
                    <doclint>none</doclint>
                    <dependencySourceIncludes>
                       <dependencySourceInclude>com.some:some</dependencySourceInclude>
                    </dependencySourceIncludes>
                    <doctitle>Title - ${project.version}</doctitle>
                    <includeDependencySources>true</includeDependencySources>
                    <windowtitle>Title</windowtitle>
                </configuration>
            </execution>
        </executions>

6 个答案:

答案 0 :(得分:8)

在java doc maven插件配置中的以下选项的帮助下完成此任务

<additionalJOption>--no-module-directories</additionalJOption>

答案 1 :(得分:1)

此错误应在 JDK 12 中修复:https://bugs.openjdk.java.net/browse/JDK-8215291

感谢 Chris Povirk 找到相关错误报告。

答案 2 :(得分:0)

This indeed resolves the «Search» linking to ../undefined/... problem. There is however a nasty side effect: Links to standard classes or interfaces directing towards e.g. https://docs.oracle.com/en/java/javase/12/docs/api/... will be broken due to missing module names.

Consider e.g. links to java.lang.String now incorrectly pointing to https://docs.oracle.com/en/java/javase/12/docs/api/java/lang/String.html rather than towards https://docs.oracle.com/en/java/javase/12/docs/api/java.base/java/lang/String.html.

答案 3 :(得分:0)

这有点骇人听闻,但正如@Martin Goikhis answer中提到的那样,指定--no-module-directories会由于缺少模块名称而中断到标准类的任何外部链接。正如OP在评论中提到的那样,getURLPrefix(ui)中的search.js是生成模块名称的原因。因此,在深入研究之后,我发现可以通过将其附加到search.js的末尾来解决此问题:

getURLPrefix = function(ui) {
    return "";
}

实质上将覆盖getURLPrefix的定义以无论如何都返回空字符串。由于只需要将其附加到文件的末尾,因此使用代码或命令使用任何构建工具进行自动化应该足够容易。

答案 4 :(得分:0)

Javadoc生成的每个.html文件都包含以下变量定义:

var useModuleDirectories = true;

这会影响getURLPrefix()search.js函数的行为:

function getURLPrefix(ui) {
    var urlPrefix="";
    if (useModuleDirectories) {
        ...
    }
    return urlPrefix;
}

因此,我们可以通过用useModuleDirectories覆盖false的值来解决此问题,这可以通过在-bottom选项中指定以下脚本标记来实现:

<script>
if (typeof useModuleDirectories !== 'undefined') {
  useModuleDirectories = false;
}
</script>

请注意,您还必须指定--allow-script-in-comments选项,以使Javadoc不会抱怨在注释中使用<script/>标签。

答案 5 :(得分:0)

正在添加 <additionalJOption>-no-module-directories</additionalJOption>

为我工作。一个-而不是--