在使用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
这会给我上面提到的警告。现在,我知道两种可能的方法来解决问题。这个警告:
JavaSE-1.7
两种解决方案'对我来说似乎完全荒谬。我的项目不需要JavaSE-1.7。它在JavaSE-1.6上运行得非常好。要求捆绑包的所有用户至少拥有Java 7,只是因为开发人员使用的是Java 7并且不喜欢这个警告,这似乎与我想要的相反。另一方面,要求我作为开发人员安装所有Java版本,并将其列为我工作的项目所需的执行环境,这似乎几乎是荒谬的。所有这些项目在Java 7上运行得非常好,为什么我需要有很多项目呢?
我是否完全遗漏了某些内容(在这种情况下我是not the only one),或者这个警告真的很愚蠢,因为它正积极推动开发人员设置严格要求他们的项目需要更高的执行环境?任何见解(并希望是第三种摆脱这种警告的方式)将不胜感激。
答案 0 :(得分:5)
有三种方法可以摆脱警告:
使用Java 6运行时替换项目的当前运行时环境
这是推荐的解决方案。警告试图说明的是指定Java 6的最低要求执行环境,但是在开发期间使用Java 7环境本身存在风险,因为您可以编写一些仅适用于Java 7的代码,直到您不会注意到这一点。您部署到Java 6环境并打破(感谢greg-449和Konstantin Komissarchik在评论中提及此内容。
第1步:添加新的Java 6 Runtime环境:
窗口 - >偏好 - > Java /已安装的JRE - >按钮'添加...'
第2步:选择新添加的JRE作为项目的运行时
Poject - >属性 - > Java构建路径
将MANIFEST条目更改为JavaSE-1.7
这个解决方案很简单。最大的缺点是,您将强制项目的所有用户将Java运行时升级到您使用的任何版本。因此,如果您想支持较旧的运行时也不是很好。
更改构建设置以忽略警告
让Eclipse停止抱怨。 警告:小心使用。忽略警告可能会让您错过在不注意的情况下破坏与旧虚拟机的向后兼容性。
窗口 - >偏好 - > Java / Compiler / Building(如果适用,则为每个项目的等效页面):
答案 1 :(得分:0)
这不是一个非常重要的问题,我同意之前提供的解决方案,但此消息仍在以下近期内容中提供:
我尝试了一件我很久没做过的事情(也许是自从我第一次使用Eclipse以来):尝试欢迎页面上提供的示例,一个标有“Samples - Try the samples”的图标。我做到了,一个wizzard在一个项目中安装了很多源代码,我在项目根目录上得到了一个红色感叹号。查看Problems视图给出了解决方案:整个项目是针对旧的J2SE-1.4 JRE定义的。
通过编辑项目的JRE系统库,在Java Build Path窗口中更改它似乎很容易:我选择了Workspace默认JRE(jre1.8.0_25)选项。
这就是我收到消息的结果“类路径的JRE容器与'J2SE-1.4'执行环境不完全匹配”。我决定尝试解决这个(微不足道的)问题,以便在示例代码中为我的调查找到一个干净的起点。这不是那么明显。
双击“问题”视图中的错误消息将带您进入项目的清单文件中,带有红色标记的行:
Bundle-RequiredExecutionEnvironment: J2SE-1.4
尝试将版本1.4更改为1.8不是解决方案,您会收到消息:“'J2SE-1.8'不是有效的执行环境”。
尝试删除该行不再是解决方案,您收到消息: “没有设置所需的执行环境”。
花了一点时间后,我创建的正确操作很简单:使用Eclipse的清单编辑器执行相同的操作以获取选项的正确名称:它不是J2SE-1.8而是JavaSE1.8
这是proc:
在编辑器视图的清单文件的“概述”窗格中,在“执行环境”范围中,单击“添加...”按钮并选择“JavaSE-1.8”
选择J2SE1.4并选择删除按钮。
就是这样。