Связывание между модулями в javadoc - PullRequest
0 голосов
/ 23 июня 2018

Опция -link в команде javadoc в java 10 не работает для меня согласованно с модулями.

В частности, она не работает, когда имя зависимого модуля совпадает с именем модуля.имя экспортируемого пакета

Я запускаю следующую команду

/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

Так что генерируется javadoc для двух классов в пакете uk.co.sr.vcher.service, которые находятся в каталоге src / serviceи связывание документов с 5 другими модулями в моем приложении, а также с jdk docs

jar-модуль, который я построил, находится в приложении /, внешние зависимости находятся в lib /

Javadoc успешно генерируетHTML.Но ссылки на классы в некоторых (не во всех) других модулях моего приложения не работают, отсутствуют каталоги путей пакета.

То, что я показываю ниже, является частью вывода HTML для одного конструктораuk.co.sr.vcher.service.ServiceImpl.Он принимает четыре параметра: File, ConnectionSource, Coder и ApplicationConfig

. Я удалил ссылку, прикрепленную к ServiceImpl, и добавил несколько пробелов длячитаемость.Это ссылки, связанные с четырьмя типами параметров, которые меня интересуют.

, File - это java.io.File и правильно ссылается на docs.oracle.com

, ConnectionSource - этоuk.co.sr.vcher.db.ConnectionSource и в то время как во всплывающей подсказке отображается пакет правильно, а ссылка ведет на javadoc для нужного модуля uk.co.sr.db, ссылка неправильная, так как она не включает путь пакета

Coder равно uk.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.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.Но это не должно ничего ломать.

<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 или я делаю что-то не так.

1 Ответ

0 голосов
/ 24 июня 2018

Я собираюсь пойти дальше и назвать это ошибкой javadoc.Я не совсем понимаю код javadoc, но вполне вероятно, что он хранит пакеты и модули внутри одного и того же словаря, поэтому, если модуль имеет то же имя, что и пакет, он перезаписывает информацию о пакете.Затем, когда ему нужно найти путь к пакету, происходит сбой, и по умолчанию используется пустая строка.

Я сообщил об ошибке в Oracle .Обновится, если это приведет к чему-либо полезному.

Обходной путь - переименовать ваш модуль (uk.co.sr.vcher.db в моем примере) во что-то, что не является именем одного из экспортируемых пакетов.

...