JDK 1.7允许自定义标记名称*起始*带点。 JDK 1.8禁止它吗?

时间:2015-02-25 18:00:06

标签: java java-8 javadoc taglet

我用.codelet.codelet.and.out等编写了一个名为 start custom taglet library {。}}。它是用JDK 7编译的。

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

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

如果我使用将代码更改为{@codelet mypkg.Temp}

,则将代码更改为<{1}}:

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

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

-tag option的JavaDoc工具文档(在该部分的底部附近)指出:

  

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

我在这里错过了一些东西吗?或者这是一个无证的变化,真的很糟糕?因为它需要我的库中有很大的变化,如果是这样的话。

仅供参考:Taglet overview docs

1 个答案:

答案 0 :(得分:4)

  

我在这里错过了一些东西吗?

嗯,你引用的文档部分说明了这一点:

  

&#34; ...然后你可以使用与用于包的类似的点分隔命名约定:com.mycompany.todo&#34;

请注意,它表示&#34;点分隔&#34;命名约定,而不是&#34;带有点的名称&#34;。

请注意,它表示&#34;类似于用于包&#34;。如果您尝试使用&#34; .mypackage&#34;作为包名,编译器会说&#34;没办法!&#34;。

我的阅读是你的&#34; .codelet&#34;标签名称不符合文档中规定的标准。所以发生的事情是{8}的Java 8版本已被更改为严格执行taglet命名规则。从您的角度来看,这很不幸,但最终问题出在您的javadoc评论中,而不是工具。