在javadoc中链接模块

And*_*ess 7 java javadoc java-9

-link对于模块而言,java 10中javadoc命令的选项不能始终如一地工作.

具体来说,它不适用于依赖模块名称与其导出的包的名称相同的情况

我运行以下命令

/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
Run Code Online (Sandbox Code Playgroud)

所以这是生成Javadoc两类封装uk.co.sr.vcher.service,其是在src /服务,和连接该文档到其它5个模块在我的申请,再加上JDK文档

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

Javadoc成功并生成HTML.但是我的应用程序的某些(并非所有)其他模块中的类的链接被破坏,缺少包的路径目录.

我在下面显示的是一个HTML输出的一个构造函数uk.co.sr.vcher.service.ServiceImpl.它需要四个参数:a File,a ConnectionSource,a Coder和anApplicationConfig

ServiceImpl为了便于阅读,我已经取出附加的链接,并添加了一些空格.这是我关注的四种参数类型的链接.

Filejava.io.File,正确地链接到docs.oracle.com

ConnectionSourceuk.co.sr.vcher.db.ConnectionSource,虽然该提示正确显示封装,链接去的Javadoc正确的模块uk.co.sr.db,链接是错误的,因为它不包括包的路径

Coderuk.co.sr.vcher.Coder从模块uk.co.sr.vcher.core.在这种情况下,链接是正确的core/uk/co/sr/vcher/Coder.html

ApplicationConfig,如Coder,是从包装uk.co.sr.vcher在模块uk.co.sr.vcher.core,并且链接是正确的.

在我的整个项目中,指向两个模块的链接是正确的,但是由于缺少包路径而导致所有其他模块被破坏.

我以同样的方式为每个模块创建了javadoc.它们包含元素列表文件,而不是包列表文件.该uk.co.sr.vcher.service模块取决于uk.co.sr.vcher.dbuk.co.sr.vcher.core模块.

据我所看到的,这是我可以链接到成功的模块和我不能是"好"的有没有别的子包的那些之间的区别.ie module uk.co.sr.vcher.db包含package 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)
Run Code Online (Sandbox Code Playgroud)

更新:我已经放了一个最小的示例项目 - 三个java类,三个模块 - 在https://github.com/andrewmcguinness/javadoc_issue上显示了同样的问题

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

And*_*ess 2

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

我已向Oracle 报告了该错误。如果有任何有用的结果,将会更新。

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