19

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

  • 莫哈拉 2.2.7
  • PrimeFaces 5.0 最终版
  • PrimeFaces 扩展 2.0 最终版
  • OmniFaces 1.8.1
  • 具有 JPA 2.1 的 EclipseLink 2.5.2
  • GlashFish 4.0
  • NetBeans IDE 8.0
  • JDK 1.7

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

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

早些时候他们都是1.6。


进行这些更改后,清理项目时会出现以下警告。

警告:注释处理器'org.eclipse.persistence.internal.jpa.modelgen.CanonicalModelProcessor'支持的源版本'RELEASE_6'小于-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 进行了测试。

我假设它是固定的。

4

1 回答 1

18

根据Java API 规范,@SupportedSourceVersion 注释(它是日志的来源)指定“注释处理器支持的最新源版本”,而不是最低版本。

阅读NetBeans 论坛上有关此主题的讨论,它表明您几乎没有解决方案。我想唯一的解决方案是更改CanonicalModelProcessor中的代码:

为了使 EclipseLink 运行时与 Java 6 兼容,您有 @SupportedSourceVersion(RELEASE_6)

要正确适应 Java 7 编译,您应该有 @SupportedSourceVersion(RELEASE_7)

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

该问题被报告为 JDK错误。结论是没有其他明确的解决方法。

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

因此,无论您是否使用适当的常量自行编译 EclipseLink,是否接受警告...

于 2014-07-23T07:12:47.850 回答