在Java 10中,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
中的两个类(分别位于src / service下)生成javadoc,并将文档链接到应用程序中的其他5个模块,以及jdk文档
我构建的模块jar在app /中,外部依赖项在lib /
中Javadoc成功并生成HTML。但是到我的应用程序某些其他模块(不是全部)的类的链接断开了,缺少了软件包的路径目录。
我在下面显示的是uk.co.sr.vcher.service.ServiceImpl
的一个构造函数的一部分HTML输出。它包含四个参数:File
,ConnectionSource
,Coder
和ApplicationConfig
为了便于阅读,我删除了附加到ServiceImpl
的链接,并添加了一些空格。这是我关注的四个参数类型的链接。
File
是java.io.File
,并且正确链接到docs.oracle.com
ConnectionSource
是uk.co.sr.vcher.db.ConnectionSource
,并且工具提示正确显示了软件包,并且链接转到了正确模块uk.co.sr.db
的javadoc时,该链接是错误的,因为它不正确。包括包装的路径
Coder
来自模块uk.co.sr.vcher.Coder
的{{1}}。在这种情况下,指向uk.co.sr.vcher.core
core/uk/co/sr/vcher/Coder.html
与ApplicationConfig
一样,来自模块Coder
中的软件包uk.co.sr.vcher
,并且链接正确。
在我的整个项目中,指向两个模块的链接是正确的,但是到所有其他模块的链接由于缺少包路径而中断。
我已经以相同的方式为每个模块创建了Javadoc。它们在其基础上包含元素列表文件,而不是软件包列表文件。 uk.co.sr.vcher.core
模块取决于uk.co.sr.vcher.service
和uk.co.sr.vcher.db
模块。
据我所知,可以成功链接的模块与不能链接的模块之间的区别是“好”模块不在任何其他子包中。即模块uk.co.sr.vcher.core
包含程序包uk.co.sr.vcher.db
,它是程序包uk.co.sr.vcher.db
的子程序包,它包含在模块uk.co.sr.vcher
中。但这不应该破坏任何东西。
uk.co.sr.vcher.core
更新:我放置了一个最小的示例项目-三个Java类,三个模块-在https://github.com/andrewmcguinness/javadoc_issue
上显示了相同的问题 更新2 :我将原因归结为软件包<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> 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)
的名称与模块uk.co.sr.vcher.db
的名称相同。将模块名称更改为uk.co.sr.vcher.db
即可对其进行修复。我仍然想知道这是否是jdk错误或我做错了什么。
答案 0 :(得分:1)
我将继续将其称为javadoc错误。我不太了解javadoc代码,但是它很可能内部将程序包和模块存储在同一词典中,因此,如果模块与程序包具有相同的名称,则它将覆盖程序包信息。然后,当必须查找包的路径时,它将失败,并且默认为空字符串。
我有reported the bug to Oracle。如果结果有用,将进行更新。
解决方法是将您的模块(在我的示例中为uk.co.sr.vcher.db
)重命名为不是导出软件包之一的名称。