问题标签 [taglet]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 如何防止配置文件重复重新加载?静态持有它不起作用
我正在编写一个基于 taglet 的库,当找到第一个 taglet 时,它会加载一些配置(从一个填充属性的文本文件开始)。
配置对象直接静态保存在每个Taglet
对象中,但似乎它们正在被垃圾收集,然后javadoc.exe
在后续的 taglet 中重新生成,导致配置一次又一次地重新加载。
我是否正确理解这一点,有没有办法解决?我怎样才能使配置只加载一次?
谢谢。
更新
如评论中所述,不,这不会影响性能或正确性。由于javadoc.exe
由一个人在一台机器上使用,因此性能不是什么大问题。
但是,每次加载配置时(每次javadoc.exe
运行至少 5 次),它都会弄乱日志,并且它会做一些中等繁重的事情,包括package-list
从多个网站加载 s,加载和解析模板文件,以及一堆其他文件处理. 如果有任何方法可以防止这种情况在单个 JavaDoc 运行中多次发生,我愿意。
我没有使用多线程的经验,所以我可能完全错了……但是设置一个除了加载配置之外什么都不做的守护线程,然后静态地保持它呢?这个答案表明基于 I/O 的守护线程是一个坏主意,但我认为这意味着那些执行持续 I/O 的线程。
(我不确定这是否应该手动启动和停止,或者进程本身是否有可能启动守护线程......我将阅读 Bloch 的 Effective Java 中的并发章节...... .)
java - Ant JavaDoc 任务从自定义 taglet 中抛出 `NoClassDefFoundError`,即使类 *is* 在类路径上
我在处理 JavaDoc Ant 任务时遇到问题。java.lang.NoClassDefFoundError
据我所知,它为我提供了一个绝对在类路径上的类。根据文档,NoClassDefFoundError
当类在编译期间存在时抛出,但在运行时找不到。( ANoClassDefFoundError
不是。ClassNotFoundException
)
当我删除类路径项时,它按预期失败(很多包/符号未找到错误)并且它仍然给出相同的NoClassDefFoundError
. 为什么无论类是否在类路径上,taglet 都会失败?
具体情况:
它找不到的类被称为com.github.xbn.io.SimpleDebugable
,它在这个jar文件中:
- 罐子文件:
C:\data_jeffy\programming\sandbox\z__for_git_commit_only\codelet\z_build\jar_dependencies\xbnjava-0.1.4.2-all.jar
JavaDoc Ant 任务。上面的 jar 文件是类路径中的第一项。
结果是:
完整输出:
当您从类路径中完全删除 jar 文件时,它会按预期失败,出现数百个package com.github.xbn.... does not exist
错误symbol not found
,这意味着类路径元素显然是“工作”的。那么为什么它不适用于 taglet 呢?
jar不在类路径上的输出:
续(删除约 1,500 行):
继续:在最后,它给出了与 jar在类路径中时相同的错误:
在原始(上图)目标中,taglet 的路径指向 jar 文件。对于以下内容,我将 taglet 类文件从 jar 中提取到一个目录中(仅提取了这四个 taglet 类,其他所有内容都保留在 jar 中),并将 taglet 路径更改为根目录。
现在NoClassDefFoundError
没有发生。取而代之的是
现在的问题是,JavaDoc 似乎正在“吞噬”这个错误。不知道怎么看那个痕迹java.lang.ClassNotFoundException
。
完整输出:
再次详细输出:http ://dpaste.com/3T0B40X
java - JDK 1.7 允许自定义 taglets 的名称*以点开头*。JDK 1.8 禁止它?
我编写了一个自定义 taglet 库,其名称以点开头:.codelet
、、.codelet.and.out
等等。它是用 JDK 7 编译的。
使用 1.7 生成 JavaDoc 时javadoc.exe
,它工作正常。但是当使用 JDK 8 生成它时,它会失败,因为
如果我使用taglet(而不是 taglet 代码本身)将代码更改为{@codelet mypkg.Temp}
:
将 taglet 源代码中的名称更改为cod.elet
(code.let
不好,因为code
它是已经存在的 taglet 名称),并使用该新名称,它可以工作。
该-tag
选项的 JavaDoc 工具文档(靠近该部分的底部)指出:
避免冲突:如果您想创建自己的命名空间,那么您可以使用类似于用于包的点分隔命名约定:com.mycompany.todo。Oracle 将继续创建名称不包含点的标准标签。您创建的任何标签都将覆盖由 Oracle 定义的同名标签的行为。如果您创建一个@todo 标记或标记,那么它始终具有您定义的相同行为,即使 Oracle 稍后创建了一个同名的标准标记。
那么我在这里错过了什么吗?或者这是一个无证的变化,真的很糟糕?因为它需要在我的库中进行相当大的更改,如果是这样的话。
仅供参考:Taglet 概述文档
java - Maven Javadoc 插件未找到自定义标记
我创建了一些自定义 JavaDoc Taglets,如下所述:
http://docs.oracle.com/javase/7/docs/technotes/guides/javadoc/taglet/overview.html
当我手动指定 Taglets 类时,它们可以与 Maven Javadoc 插件一起正常工作:
如此处所述:http ://maven.apache.org/plugins/maven-javadoc-plugin/examples/taglet-configuration.html
但是,如果我有插件自动检测我的 Taglets,如上述链接末尾所述,即:
然后,在构建时,我收到以下错误:
有人对检查什么有建议吗?
谢谢!
java - 如何注册具有配置差异的自定义 doclet 的多个实例
我正在编写一个自定义 Javadoc doclet 来打印包含类的 javax.validation 约束表。它基本上可以工作,但我发现 Doclet 框架非常严格且不灵活。
对于背景,一个类中的一个属性很可能有多个验证约束。当我最初编写 Taglet 时,我在表中为每个约束呈现单独的行,即使属性名称相同。
有人评论说,他们希望可以选择在同一行上呈现单个属性的所有约束,以逗号分隔。我个人认为我不希望这样,但我认为没有理由限制这一点,因为这是一个合理的要求。
所以,我想,在 Taglet 上允许配置选项有多难?很难,正如我发现的那样。
首先,我假设可以定义带有配置选项的 Taglets。然后我发现没有办法做到这一点。
好的,所以我想我会使用一些技巧。
这是我的 taglet 类中的一段代码:
使用这样的代码,它工作得非常好,每个约束呈现一行。
如果我在被注释掉的两行中重新注释,这是尝试使用不同名称注册 taglet 的 SECOND 实例,在名称末尾添加“Combined”。在我的“toString(Tag)”方法中,我检查了“isCombinedConstraints”选项,将单个属性的所有约束呈现在一行上。如果默认设置了“combinedConstraints”,我确保此功能有效。
所以,如果我用注释的这两行来运行它,我会得到一个令人困惑的错误:
这就是我得到的所有信息。没有堆栈跟踪甚至可以告诉我这是在哪里发生的。
当我第一次看到这一点时,我认为我必须同时更改了其他会导致这种情况的东西。然后我注释掉了两个新行并重新测试,错误就消失了。
javadoc - 使用 maven-javadoc-plugin,如何加载包含 taglet 引用的类?
我开发了一个自定义 javadoc taglet,它通过 API 使用反射来获取有关 taglet 在其中引用的类的信息。它用“”加载类Class.forName(String)
。
我能够让它在 taglet 本身的项目中工作,甚至可以使用“ ToolProvider.getSystemDocumentationTool()
”运行集成测试并验证结果内容。
我现在已经在我们的 nexus 服务器中安装了这个工件,我试图从一个用 Maven 和maven-javadoc-plugin
.
当我第一次运行在“Foo.java”中引用了我的标签的构建时,我在我的 taglet 代码中看到了 ClassNotFound 异常,说它找不到指定的类。
这告诉我它正在进入我的 taglet 代码,但它无法加载相关类的类文件。这有点讽刺,因为它可以到达这里的唯一方法是查找和解析与该类关联的源文件。
因此,我随后编辑了 maven-javadoc-plugin 配置,添加了一个“ additionalDependencies
”块,指定包含引用该标记的类文件的工件。
我还设置了“ verbose
”标志,我看到在结果输出中,当它打印“ search path for class files
”时,我在该列表的末尾找到了带有相关类的工件 jar。
但是,我仍然收到错误消息。
这里还有什么问题?
以下是相关代码的一些摘录:
下面是 Taglet 类中的部分代码,显示了包含类的加载:
当我运行构建时,我看到了这个输出:
我注意到输出中的以下行(详细打开):
我检查了列表末尾的 jar,并确认有问题的类在那里。