具有运行时保留的注释库的可选依赖性

时间:2017-05-18 20:47:09

标签: java sql annotations dynamic-linking jooq

地狱冻结了,我正在考虑向JSR-305 @Nonnull and @Nullable annotations API添加依赖jOOQ,例如作出如下保证:

@Retention(RUNTIME)

在所有不幸的选项中,我选择JSR-305,当然,因为它似乎是最不具侵入性的依赖,despite it being dormant。这些是我的侵入性问题:

我的问题:

JSR-305注释有NoClassDefFoundError,原因很明显。这意味着通过添加这样的注释,我将在该库上创建编译时依赖项。我可以忍受。

但是,我不想要求jOOQ API的消费者将这种依赖性添加到运行库中。应该可以运行jOOQ而不会遇到任何import static java.lang.annotation.RetentionPolicy.RUNTIME; import java.lang.annotation.Retention; class Annotated { @Annotation public static void main(String[] args) { System.out.println("works"); } } @Retention(RUNTIME) @interface Annotation {} 等等。

我做了以下测试:

Annotated.class

然后我将Annotation.class复制出项目(没有focus_set())并运行它。它按预期印刷了“作品”。

这可以保证有效吗?如果是/否,为什么?

注意:我知道this Q&A,但我正在寻找这种行为的JLS风格的正式证明。另外:我提供了比严格需要更多的上下文,因为可能还有另一个解决方案。

0 个答案:

没有答案