来自注释处理器的org.eclipse.persistence.internal.jpa.modelgen.CanonicalModelProcessor支持的源版本RELEASE_6小于source1.7

时间:2014-04-13 15:23:26

标签: java-ee jpa eclipselink java-ee-7 jpa-2.1

我有一个在以下环境中运行的企业应用程序。

  • Mojarra 2.2.7
  • PrimeFaces 5.0 final
  • PrimeFaces Extension 2.0 final
  • OmniFaces 1.8.1
  • 具有JPA 2.1的EclipseLink 2.5.2
  • GlashFish 4.0
  • NetBeans IDE 8.0
  • JDK 1.7

我已在所有三个模块(Java EE模块,EJB模块和WAR模块)中project.properties下的nbproject文件中将源级别从1.6更改为1.7,以支持Java EE 7。它是 Maven项目。

  • j2ee.platform=1.7
  • javac.source=1.7
  • javac.target=1.7

之前他们都是1.6。


完成这些更改后,清洁项目时会出现以下警告。

  

警告:支持的源版本' RELEASE_6'来自注释   处理器   ' org.eclipse.persistence.internal.jpa.modelgen.CanonicalModelProcessor'   少于-source' 1.7'

我使用 EclipseLink元模型生成器1.3.0 final 生成静态元模型。

除了将源级别降级到1.6之外,有没有办法摆脱此警告?是否与此警告不兼容?


更新:

此警告在EclipseLink 2.6.1(自2015年10月15日星期四起可用)中不再可再现,并且捆绑包提供了相应的元模型生成器 - org.eclipse.persistence.jpa.modelgen_2.6.1.v20150916-55dc7c3.jar

目前在GlassFish 4.1 / Java EE 7上使用EclipseLink 2.6.1(JPA 2.1)和JDK 8u45进行了测试。

我认为它已修复。

1 个答案:

答案 0 :(得分:14)

根据the Java API specification,@ SupportMourceVersion注释(它是日志的起源)指定“注释处理器支持的最新源版本”,而不是最小值。

在这个主题上阅读discussion on the NetBeans forum,它表明你的解决方案很少。我想唯一的解决方案是更改CanonicalModelProcessor中的代码:

为了使EclipseLink运行时符合Java 6,您可以使用 @SupportedSourceVersion(RELEASE_6)

要适当地适应Java 7编译,你应该有 @SupportedSourceVersion(RELEASE_7)

但据我了解,您并不是自己编译EclipseLink。主要问题(以及警告的原因)是软件提供程序(即Eclipse基础)保证在Java SE 6环境中正确处理代码。

问题是reported as a JDK错误。结论是没有其他明确的解决方法。

解决方案是指定RELEASE7常量(至少根据API的说法)。但是如果EclipseLink团队这样做,他们就无法在Java 6环境中进行编译。

所以,无论你是否使用适当的常量自己编译EclipseLink,无论你是否接受警告......