我正在为一个项目尝试使用Java 7,并从注解处理器(Bindgen和Hibernate JPA modelgen)收到以下警告:
warning: Supported source version 'RELEASE_6' from annotation processor 'org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor' less than -source '1.7'
这是由注解处理器类上的@SupportedSourceVersion(SourceVersion.RELEASE_6)
注解引起的。因为它们是使用Java 6编译的,所以它们可以使用的最高版本的SourceVersion
值是RELEASE_6
。Java 7版本的SourceVersion
引入了RELEASE_7
。
我的问题是:注解处理器应该如何处理向前兼容?它们是否必须有单独的jdk6和jdk7二进制版本?我是否没有理解其他内容?
我只找到了有关此问题的以下信息:
Querdydsl bug report,其中使用了
@Override
public SourceVersion getSupportedSourceVersion() {
return SourceVersion.latest();
}
Oracle博客中的评论者建议支持最新的源代码版本。
SourceVersion.latest()
和SourceVersion.latestSupported()
之间存在差异。第一个使用来自注解处理器编译 JDK 的硬编码常量。它不能被内联化,从而失去了动态方面。而SourceVersion.latestSupported()
使用目标代码编译时所用的 JDK 版本,由 AP 处理。 - Ondřej Fischer.latest()
不是一个"枚举常量表达式" - 指定向前兼容的唯一方法是使用getSupportedSourceVersion
方法本身吗? - theonlygustilatest()
,我认为除了重写getSupportedSourceVersion
没有其他办法。 - kapex