javadoc中模块之间的链接

Linking between modules in javadoc

java10 中 javadoc 命令的 -link 选项对我的模块工作不一致。

具体来说,当依赖模块名称与其导出的包名称相同时,它不起作用

我运行以下命令

/opt/jdk-10.0.1/bin/javadoc -html5 
 -subpackages uk.co.sr.vcher.service \
 --source-path src/service \
 --module-path lib:app -d javadoc/service \
 -link ../auth -link ../db -link ../models \
 -link ../core -link ../render \
 -link https://docs.oracle.com/javase/10/docs/api \
 -linksource src/service/uk/co/sr/vcher/service/Service.java \
  src/service/uk/co/sr/vcher/service/ServiceImpl.java \
  src/service/module-info.java

所以这是为包 uk.co.sr.vcher.service 中的两个 类 生成 javadoc,它们在 src/service 下,并且 linking 文档到 5我应用程序中的其他模块,加上 jdk 文档

我构建的模块 jar 在 app/ ,外部依赖在 lib/

Javadoc 成功并生成 HTML。但是我的应用程序的某些(不是全部)其他模块中的 link 到 类 已损坏,缺少包的路径目录。

我在下面展示的是 uk.co.sr.vcher.service.ServiceImpl 的一个构造函数的 HTML 输出的一部分。它有四个参数:a File、a ConnectionSource、a Coder 和 an ApplicationConfig

为了便于阅读,我删除了附加到 ServiceImpl 的 link,并添加了一些空格。我关心的是附加到四种参数类型的 links。

Filejava.io.File 并且 link 正确地变为 docs.oracle.com

ConnectionSourceuk.co.sr.vcher.db.ConnectionSource 并且工具提示正确显示包,并且 link 转到 java 正确模块的文档 uk.co.sr.db, link 是错误的,因为它不包括包的路径

Coder 是来自模块 uk.co.sr.vcher.coreuk.co.sr.vcher.Coder。在这种情况下 link 是正确的, core/uk/co/sr/vcher/Coder.html

Coder 一样,ApplicationConfig 来自模块 uk.co.sr.vcher.core 中的包 uk.co.sr.vcher,并且 link 是正确的。

在我的整个项目中,link两个模块是正确的,但所有其他模块都因缺少包路径而损坏。

我以相同的方式为我的每个模块创建了 javadoc。它们在其基础上包含元素列表文件,而不是包列表文件。 uk.co.sr.vcher.service 模块依赖于 uk.co.sr.vcher.dbuk.co.sr.vcher.core 模块。

据我所知,我可以 link 成功的模块和我不能成功的模块之间的区别是 "good" 模块不在子包中还要别的吗。即模块 uk.co.sr.vcher.db 包含包 uk.co.sr.vcher.db,它是包 uk.co.sr.vcher 的子包,后者包含在模块 uk.co.sr.vcher.core 中。但这不应该破坏任何东西。

<span class="memberNameLink">
ServiceImpl</span>(
<a href="https://docs.oracle.com/javase/10/docs/api/java/io/File.html?is- 
external=true"
title="class or interface in java.io" 
class="externalLink">File</a> workDirectory,

<a href="../../../../../../db/ConnectionSource.html?is- 
external=true" 
title="class or interface in uk.co.sr.vcher.db" 
class="externalLink">ConnectionSource</a> db,

<a href="../../../../../../core/uk/co/sr/vcher/Coder.html?is- 
external=true" 
title="class or interface in uk.co.sr.vcher" 
class="externalLink">Coder</a>&nbsp;coder,
<a href="../../../../../../core/uk/co/sr/vcher/ApplicationConfig.html?is- 
external=true" 
title="class or interface in uk.co.sr.vcher" 
class="externalLink">ApplicationConfig</a> config)

更新:我放了一个最小的示例项目——三个java类,三个模块——在https://github.com/andrewmcguinness/javadoc_issue

更新 2:我将原因归结为包的名称 uk.co.sr.vcher.db 与模块的名称 uk.co.sr.vcher.db 相同。将模块名称更改为 uk.co.sr.vcher.pdb 修复它。我仍然想知道这是 jdk 错误还是我做错了什么。

我将继续并将其称为 javadoc 错误。我不太了解 javadoc 代码,但看起来很可能它在内部将包和模块存储在同一个字典中,因此如果模块与包同名,它会覆盖包信息。然后当它必须查找包的路径时,它失败并默认为空字符串。

reported the bug to Oracle。如果有任何有用的结果,将会更新。

解决方法是将您的模块(uk.co.sr.vcher.db 在我的示例中)重命名为不是导出包之一的名称。