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。
File
是 java.io.File
并且 link 正确地变为 docs.oracle.com
ConnectionSource
是 uk.co.sr.vcher.db.ConnectionSource
并且工具提示正确显示包,并且 link 转到 java 正确模块的文档 uk.co.sr.db
, link 是错误的,因为它不包括包的路径
Coder
是来自模块 uk.co.sr.vcher.core
的 uk.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.db
和 uk.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> 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
在我的示例中)重命名为不是导出包之一的名称。
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。
File
是 java.io.File
并且 link 正确地变为 docs.oracle.com
ConnectionSource
是 uk.co.sr.vcher.db.ConnectionSource
并且工具提示正确显示包,并且 link 转到 java 正确模块的文档 uk.co.sr.db
, link 是错误的,因为它不包括包的路径
Coder
是来自模块 uk.co.sr.vcher.core
的 uk.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.db
和 uk.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> 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
在我的示例中)重命名为不是导出包之一的名称。