关于运行时不能与'RequiredExecutionEnvironment'"完美匹配"的警告是什么?

Sti*_*itt 3 java eclipse osgi maven

在使用Java/Eclipse/Maven/OSGi时,我经常遇到这个警告:

The JRE container on the classpath is not a perfect match to the 'JavaSE-1.6' execution environment

我在Java 7 JDK上.大多数项目需要(我认为是正确的)比这更低的版本.例如,它们将需要JavaSE-1.6或JavaSE-1.5.所以在MANIFEST.MF这些项目中,这些项目将有一个看起来像这样的条目(从我的捆绑项目中取样):

Bundle-RequiredExecutionEnvironment: JavaSE-1.6

这会给我上面提到的警告.现在,我知道两种可能的方法来"解决"这个警告:

  1. 使用Java 6运行时替换项目的当前运行时环境
  2. 将MANIFEST条目更改为 JavaSE-1.7

两种"解决方案"对我来说似乎都是荒谬的.我的项目不需要JavaSE-1.7.它在JavaSE-1.6上运行得非常好.要求捆绑包的所有用户至少拥有Java 7,只是因为开发人员使用的是Java 7并且不喜欢这个警告,这似乎与我想要的相反.另一方面,要求我作为开发人员安装所有Java版本,并将其列为我工作的项目所需的执行环境,这似乎几乎是荒谬的.所有这些项目在Java 7上运行得非常好,为什么我需要有很多这样的项目呢?

难道我完全失去了一些东西(在这种情况下,我没有 唯一的 一个),或者是这个警告非常愚蠢的,因为它是积极推动开发商为他们的项目设置了更高的要求执行环境,将严格要求?任何见解(并希望第三种摆脱这种警告的方式)将不胜感激.

nit*_*ind 5

有三种方法可以摆脱警告:

  1. 使用Java 6运行时替换项目的当前运行时环境(推荐)
  2. 将MANIFEST条目更改为JavaSE-1.7
  3. 更改构建设置以忽略警告

使用Java 6运行时替换项目的当前运行时环境

这是推荐的解决方案.警告试图说明的是指定Java 6的最低要求执行环境,但是在开发期间使用Java 7环境本身存在风险,因为您可以编写一些仅适用于Java 7的代码,直到您不会注意到这一点.您部署到Java 6环境并且它中断(感谢greg-449Konstantin Komissarchik在评论中提到这一点).

第1步:添加新的Java 6 Runtime环境:

窗口 - >首选项 - > Java /安装的JRE - >按钮'添加...'

Eclipse首选项,Java /已安装的JRE

步骤2:选择新添加的JRE作为项目的运行时

Poject - > Properties - > Java Build Path

Eclipse Project属性,Java Build Path


将MANIFEST条目更改为JavaSE-1.7

这个解决方案很简单.最大的缺点是,您将强制项目的所有用户将Java运行时升级到您使用的任何版本.因此,如果您想支持较旧的运行时也不是很好.


更改构建设置以忽略警告

只是让Eclipse停止抱怨.警告:小心使用.忽略警告可能会让您错过与旧VM的向后兼容性而不会注意到它.

窗口 - >首选项 - > Java /编译器/构建(如果适用,则为每个项目的等效页面):

Java Building首选项页面