当类路径中缺少注释的附加到类时的行为规范

时间:2019-06-13 15:57:30

标签: java annotations

我正在寻找一个规范,说明用消费者的类路径中不存在的注释对Java类进行注释时的行为。具体来说,当将带注释的类打包为jar并拉入另一个项目时(用Maven术语来说,“可选”或“提供”的依赖项包含注释,而依赖项选择不依赖该注释。)

我发现了一个古老的Eclipse错误线程,其中提到了这一点:https://bugs.eclipse.org/bugs/show_bug.cgi?id=320965

  

我的理解是,如果不存在注释类,则应该从类文件中删除注释。

我观察到相同的行为;也就是说,当未找到注释时,该类似乎加载良好,但是我无法在任何地方找到指定的注释。我正在使用OpenJDK。

(对于那些好奇的人,上下文使库依赖注入友好,而无需将其绑定到特定的DI框架,因此,我想同时使用CDI注释和Guice注释,但是消费者可能不希望使用引入两组注释(如果有的话)

1 个答案:

答案 0 :(得分:1)

Java语言规范和Java虚拟机规范都没有直接涵盖这一点。后者不讨论用于验证或链接的注释,因此有人可能会认为缺少注释类型不应导致类加载失败。除了缺少类值注释中的类外,JDK API文档没有讨论这一点。看来是个疏漏。

用于用户定义(非VM)注释的解析器位于sun.reflect.annotation.AnnotationParser中。如您所见,只需跳过未知的注释:

NavigationGenerator

也没有办法检测到这种情况。因此,如果要确保没有未知的注释存在,则必须使用其他解析器来解析类文件。