9

我编写了一个自定义 taglet 库,其名称以点开头.codelet、、.codelet.and.out等等。它是用 JDK 7 编译的。

使用 1.7 生成 JavaDoc 时javadoc.exe,它工作正常。但是当使用 JDK 8 生成它时,它会失败,因为

C:\...\Temp.java:5: error: no tag name after @
 * {@.codelet mypkg.Temp}`

如果我使用taglet(而不是 taglet 代码本身)将代码更改为{@codelet mypkg.Temp}

C:\...\Temp.java:5: error: unknown tag: codelet
 * {@codelet mypkg.Temp}
Note: Custom tags that were not seen:  @.codelet
1 error

将 taglet 源代码中的名称更改为cod.elet(code.let不好,因为code它是已经存在的 taglet 名称),并使用该新名称,它可以工作。

-tag选项的 JavaDoc 工具文档(靠近该部分的底部)指出:

避免冲突:如果您想创建自己的命名空间,那么您可以使用类似于用于包的点分隔命名约定:com.mycompany.todo。Oracle 将继续创建名称不包含点的标准标签。您创建的任何标签都将覆盖由 Oracle 定义的同名标签的行为。如果您创建一个@todo 标记或标记,那么它始终具有您定义的相同行为,即使 Oracle 稍后创建了一个同名的标准标记。

那么我在这里错过了什么吗?或者这是一个无证的变化,真的很糟糕?因为它需要在我的库中进行相当大的更改,如果是这样的话。

仅供参考:Taglet 概述文档

4

1 回答 1

4

那么我在这里错过了什么吗?

好吧,您引用的文档部分是这样说的:

“ ...那么您可以使用类似于用于包的点分隔命名约定:com.mycompany.todo”

请注意,它说的是“点分隔”命名约定,而不是“带有点的名称”。

请注意,它说“类似于用于包装的内容”。如果您尝试使用“.mypackage”作为包名,编译器会说“不行!”。

我的阅读是您的“.codelet”标签名称不符合文档中规定的标准。所以发生的事情是,Java 8 版本javadoc已更改为严格执行 taglet 命名规则。从您的角度来看,这很不幸,但最终问题在于您的 javadoc 注释,而不是工具。

于 2015-02-25T18:29:28.763 回答