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, а не в инструменте.

Другие вопросы по тегам