我已经使用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>
答案 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 Goik在his 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>
为我工作。一个-
而不是--