标签: taglet

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

我写了一个自定义的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}`
Run Code Online (Sandbox Code Playgroud)

如果我使用 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
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

仅供参考:Taglet概述文档

java javadoc taglet java-8

9
推荐指数
1
解决办法
417
查看次数

如何使内联taglet(需要com.sun)更跨平台?是否有非Oracle /更多跨平台的javadoc解析器?

我正在编写一个库,它已将已经过单元测试的示例代码(其源代码,输出和任何输入文件)插入到JavaDoc中,具有许多自定义功能.使用此库的主要方法是使用内联标记,例如

{@.codelet.and.out my.package.AGreatExample}
{@.codelet my.package.AGreatExample}
{@.file.textlet examples\doc-files\an_input_file.txt}
{@.codelet.and.out my.package.AGreatExample%eliminateCommentBlocksAndPackageDecl()}
Run Code Online (Sandbox Code Playgroud)

由于自定义taglet(甚至是doclet)需要com.sun,这意味着它们不像Java本身那样跨平台.(不确定这是否相关,但单词"javadoc" - 甚至子字符串"doc" - 不在Java 8语言规范中.)

我不喜欢写一个以这种方式受限的图书馆的想法.那我该怎么办?到目前为止我的想法是这样的

  • 为了利用现有的javadoc解析器,我坚持使用com.suntaglets.但是,我将这种依赖com.sun视为"薄".也就是说,我把尽可能少的代码放在taglet类中,将大部分代码留在别处,而不依赖于com.sun.
  • 我努力创建自己的解析器,它只搜索我的特定标记.这是一种痛苦,但并不太可怕.您遍历每个Java源文件的行,搜索\{@\.myTagletName (.*?)\}.捕获该文本后,它与com.suntaglet中的代码几乎相同.
  • 必须在执行javadoc之前运行此解析器,因此需要重复的目录结构.(1)您的原始代码,带有未解析的自定义标记,(2)该代码的副本,带有解析输出.我将所有代码复制到重复目录,然后只解析已知具有这些标记的Java文件(使用解析器以某种方式"注册"的类).

这是一种合理的方法吗?是否有更多的跨平台javadoc/taglet解析器,所以我不必自己滚动?是否有任何类似于 taglet的跨平台?JavaDoc 本身不是跨平台,还是只是自定义taglet和doclet?

由于这个决定(使用内联标签),我想粗略地了解我有多少人从我的库中锁定了,但大多数时候我都在寻找一个长期的解决方案.

(尽管上面是我的Java 8链接,但我使用的是Java 7.)


感谢@fge的taglet建议,这比我最初的想法更优雅,并且@Michael对于不祥但有用的com.sun警告.

java parsing javadoc cross-platform taglet

7
推荐指数
1
解决办法
218
查看次数

从Taglet访问Java注释

我正在开发一个项目,我们有一些用于修改Javadoc的自定义Taglet类(例如链接到SVN中的源代码,添加引用)等等.我们要做的一件事就是能够获取源中使用的注释并操纵它们的信息.

似乎Taglet接口不提供访问Java源代码中的注释的简单方法.有人知道这是否可能吗?

我正在使用JDK 1.5

java annotations javadoc taglet

6
推荐指数
1
解决办法
432
查看次数

在自定义 Javadoc taglet 中展开内联标签

我编写了一个自定义 Javadoc taglet,它添加了一个新note标签:

 ...
 public boolean isInlineTag() { return false; }

  public String toString(Tag tag) {
      return "<pre class='note'>" + tag.text() + "</pre>";
   }
Run Code Online (Sandbox Code Playgroud)

到目前为止它可以工作,但是内联标签没有扩展。这是一个评论示例:

/**
 * @note Test note with {@link Someclass} // @link tag is NOT expanded
 * @param name - here the {@link Someclass} works // works for standard 'param' tag
 */
Run Code Online (Sandbox Code Playgroud)

内联标签{@link}未展开。但是,它对于内置paramjavadoc 标记来说效果很好。

有没有办法在自定义 Javadoc taglet 中扩展嵌套内联标签?

谢谢!

java javadoc custom-tag taglet

5
推荐指数
1
解决办法
2170
查看次数

在自定义JavaDoc Taglet中加载类?

我正在编写一个自定义JavaDoc Taglet,并希望加载并创建正在处理JavaDoc的类的实例.这是我的代码(公共类CDKIOOptionsTaglet实现Taglet):

public String toString(Tag tag) {
    return "<DT><B>IO options: </B><DD>"
           + expand(tag) + "</DD>\n";
}

public String toString(Tag[] tags) {
    if (tags.length == 0) {
        return null;
    } else {
        return toString(tags[0]);
    }
}

private String expand(Tag tag) {
    // create a table with IOOptions
    StringBuffer tableContent = new StringBuffer();
    SourcePosition file = tag.position();
    String pathAndFile = file.file().toString();
    pathAndFile = pathAndFile.replaceAll("/", ".");
    pathAndFile = pathAndFile.substring(pathAndFile.indexOf("src.main") + 9);
    pathAndFile = pathAndFile.substring(0, pathAndFile.indexOf(".java"));
    try {
        Class ioClass = Class.forName(pathAndFile);
        Object ioInstance …
Run Code Online (Sandbox Code Playgroud)

java javadoc taglet

4
推荐指数
1
解决办法
904
查看次数