JDK 1.7 допускает использование пользовательских тегов с именами *, начинающимися * с точки. JDK 1.8 запрещает это?
Я написал собственную библиотеку тегов с именами, которые начинаются с точки: .codelet
, .codelet.and.out
и так далее. Он скомпилирован с JDK 7.
При создании JavaDoc с использованием 1.7 javadoc.exe
работает нормально. Но при его генерации с помощью JDK 8 происходит сбой, потому что
C:\...\Temp.java:5: error: no tag name after @
* {@.codelet mypkg.Temp}`
Если я изменю код с помощью тега (не самого кода тега) на {@codelet mypkg.Temp}
:
C:\...\Temp.java:5: error: unknown tag: codelet
* {@codelet mypkg.Temp}
Note: Custom tags that were not seen: @.codelet
1 error
Изменение имени в исходном коде тега на cod.elet
(code.let
это не хорошо, потому что code
это уже существующее имя тега), и, используя это новое имя, оно работает.
Документация по инструменту JavaDoc для -tag
Опция (в нижней части раздела) гласит:
Предотвращение конфликтов. Если вы хотите создать собственное пространство имен, вы можете использовать соглашение об именовании, разделенное точками, аналогичное соглашению, используемому для пакетов: com.mycompany.todo. Oracle продолжит создавать стандартные теги, имена которых не содержат точек. Любой созданный вами тег будет переопределять поведение тега с тем же именем, определенным Oracle. Если вы создаете тег или тег @todo, он всегда будет иметь то же поведение, которое вы определили, даже если впоследствии Oracle создаст стандартный тег с тем же именем.
Так я что-то здесь упускаю? Или это недокументированное изменение, которое просто отстой? Потому что это требует довольно больших изменений в моей библиотеке, если это так.
К вашему сведению: обзорные документы Taglet
1 ответ
Так я что-то здесь упускаю?
Ну, раздел документации, который вы цитировали, говорит об этом:
"... тогда вы можете использовать соглашение об именах, разделенных точками, аналогичное используемому для пакетов: com.mycompany.todo"
Обратите внимание, что в нем говорится "разделенное точками" соглашение об именах, а не "имена с точками в них".
Обратите внимание, что он говорит "похоже на то, что используется для пакетов". Если вы попытаетесь использовать ".mypackage" в качестве имени пакета, компилятор скажет "Нет!".
Насколько я понимаю, имя вашего тега ".codelet" не соответствует критериям, изложенным в документации. Так что случилось, что версия Java 8 javadoc
был изменен для строгого соблюдения правил именования тегов. Это печально с вашей точки зрения, но в конечном итоге проблема заключается в ваших комментариях Javadoc, а не в инструменте.