如何将所有Eclipse工作区的默认JRE更改?

41
我在C:\Program Files (x86)\Java\jre6中安装了一个JRE,并在安装Eclipse时只有它。后来,我在C:\home\SFTWR\jdk1.6.0_21中安装了完整的JDK,并将JAVA_HOME环境变量更改为该路径。但是,每次我启动新的Eclipse工作区时,它仍然只选择旧的JRE,我必须手动删除并添加新的JRE。
如何将我的Eclipse绑定到新的JDK,以便每个新的工作区都只指向它?我检查了eclipse.ini,但没有引用哪个JRE。
更新: 我进入Prefs->Java->Installed JREs,添加了新位置,标记为默认值,删除了其他选项,对当前工作区有效。但是,当我打开一个新的工作区时,只有旧的JRE可用。因此,这并没有改变适用于所有(至少是新的)工作区的核心Eclipse配置。
13个回答

27
最后终于解决了:Eclipse选择JRE的方式是使用系统的PATH。在此之前,我的路径中根本没有C:\home\SFTWR\jdk1.6.0_21\bin,但是有C:\Program Files (x86)\Java\jre6\bin。我已经将JRE_HOME和JAVA_HOME都设置为C:\home\SFTWR\jdk1.6.0_21,但两者都无关紧要。我猜测Eclipse执行了类似于where java(或UNIX / Linux上的which)的操作来查看Java路径,并获取属于那个java.exe的JRE。在我的情况下,尽管我已经进行了所有的配置调整(包括如上所述的eclipse.ini -vm选项),它仍然停留在路径中。我将旧的JRE二进制文件从路径中删除,放入新的二进制文件,现在它适用于所有workspace。

2
别忘了拿起你的袜子木偶 - 虽然找到放置它的头可能有点困难。;-) - Ed Staub
2
我想知道Eclipse团队是否会让Eclipse变得更加用户友好。真是的...昨天这还能正常工作,今天突然决定我没有花足够的工作时间来服务Eclipse。谢谢你...让我免于再次重新安装Java以取悦Eclipse。下次我会提前献祭一只羊或其他什么东西。 - Mark W
Eclipse选择JRE的方式是使用系统的PATH,但这种方式是错误的。尽管我的PATH中没有任何有关Java的信息,但Eclipse仍然会选择Java 11,而不是我在首选项中安装的JRE设置中添加的Java 8。 - Suncatcher

16

2
这也不起作用。我进入 首选项->Java->已安装的JRE,添加了新位置,将其标记为默认,删除了其他位置,但只对当前工作区有效。当我打开一个新的工作区时,只有旧的JRE是可用的。 - amphibient
1
是的,我创建了一个全新的工作区,更改了JRE并关闭了它。然后打开了另一个新的工作区,希望之前更改的JRE能够生效,但由于我只有旧的JRE,所以并没有生效。 - amphibient
它只对当前工作区有效,而且对我来说,即使对于那个工作区也没有效果。在首选项中只列出了一个JRE,但Eclipse仍然使用另一个。 - Suncatcher

16
安装的JRE用于下游Java项目和服务器执行。至于用于执行Eclipse进程(工作台)本身的JVM或JRE由您的环境、历史和eclipse.exe二进制文件控制。因此,eclipse.exe决定了Eclipse将使用哪个JRE执行自身,而不是安装的JRE首选项,因为这些首选项在OSGi框架启动之后才会被读取,而该框架是在选择JVM/JRE之后加载的。
因此,对于新的工作区,Eclipse将使用其当前正在执行的JRE来填充JRE首选项。
我知道的最好方法是强制eclipse.exe使用您通过-vm开关告诉它的JRE。因此,在您的eclipse.ini中执行以下操作:
-startup
plugins/org.eclipse.equinox.launcher_1.2.0.v20110502.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.1.100.v20110502
-vm
/path/to/exactly/what/jre/you/want/as/default/javaw.exe
...

这个不起作用。我添加了 -vm C:\home\SFTWR\jdk1.6.0_21\bin\javaw.exe - amphibient
1
你是否将“-vm”和路径放在不同的行上?应该像这样: -vm C:/home/... - gamerson
1
它对我起作用了,只需添加--vm C:\Program Files\Java\jdk1.8.0_131\jre\bin\javaw.exe到Eclipse配置文件中。 - Laxminarayana Challagonda
1
这解决了我的问题 - eclipse.ini 文件中使用了旧版本的 Java 并硬编码了 "-vm"。一旦我删除了 "-vm \path\to\non-existent\java" 行,它就可以轻松地识别新版本了。 - harry courtice

15

在Eclipse中,前往

窗口-> Java -> 已安装的JRE

您可以通过指定JDK安装路径来删除当前已安装的JRE,并添加JDK。

输入图像描述


5
我遇到了一个类似的问题,Eclipse没有使用我当前在路径上的%JAVA_HOME%,而是使用了旧版本。文档指出,如果在ini文件中没有指定-vm,Eclipse将搜索共享库jvm.dll。这将出现在注册表中,键为HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\JavaSoft\Java Runtime Environment,当使用Windows Java安装程序时会安装该键(基于64位与32位可能略有不同,但要搜索jvm.dll)。因为它在我的path上找到了这个共享库而不是%JAVA_HOME%/bin,所以它使用了旧版本。
像其他人说的那样,处理这个问题最简单的方法就是在eclipse.ini文件中指定你想要使用的特定虚拟机。我写这篇文章是因为我无法理解为什么它仍然在使用旧版本,即使在patheclipse.ini文件中都没有指定它。
请参见下面的文档链接: http://help.eclipse.org/kepler/topic/org.eclipse.platform.doc.isv/reference/misc/launcher.html?cp=2_1_3_1 寻找虚拟机并使用JNI调用API
Eclipse启动器能够使用Java Native Interface Invocation API在Eclipse进程中加载Java虚拟机。与先前版本的Eclipse一样,启动器仍然能够在单独的进程中启动Java虚拟机。使用哪种方法取决于如何找到虚拟机。
未指定-vm
当未指定-vm时,启动器首先在eclipse根目录下的jre目录和搜索路径中查找虚拟机。如果在任一位置找到了Java,则启动器会查找与该Java可执行文件相关联的jvm共享库(在Windows上为jvm.dll,在*nix平台上为libjvm.so)。
如果找到了jvm共享库,则启动器会加载它并使用JNI调用API来启动虚拟机。如果未找到jvm共享库,则启动器会执行Java启动器以在新进程中启动虚拟机。
在命令行或eclipse.ini中指定了-vm
可以使用"-vm"启动Eclipse以指定要使用的虚拟机。对于的值有几种可能性:
- directory:是一个目录。我们在该目录中查找: - (1)Java启动器或 - (2)jvm共享库。
如果找到了jvm共享库,则使用JNI调用。如果找到了启动器,则尝试在已知与启动器相关的位置中查找jvm库。如果找到了,则使用JNI调用。如果未找到jvm库,则在新进程中执行Java。
- java.exe/javaw.exe:是指向Java启动器的路径。我们执行该Java启动器以在新进程中启动虚拟机。 - jvm dll或so:是指向jvm共享库的路径。我们尝试加载该库并使用JNI Invocation API在当前进程中启动虚拟机。

5

我的回答会与amphibient的重叠,并在其基础上添加。

你的JAVA_HOME变量是正确的,但你还需要将以下内容附加到你的Path变量中:

;%JAVA_HOME%\bin

这将允许您的Windows环境中的应用程序访问JDK。在检查它们是否起作用之前,添加这些环境变量后,您还应该重新启动计算机。在我的情况下,即使注销然后再登录也不行:我必须完全重新启动。
如果您想检查环境变量是否设置正确,可以打开命令提示符并键入> echo%JAVA_HOME%和> echo%Path%以查看这些变量是否正常工作。在寻找解决方案时,我还遇到过人们声称他们需要在环境变量周围添加引号(“)才能使它们正常工作("%JAVA_HOME%"\bin),如果您的JAVA_HOME路径包含空格。起初我认为这是我的情况,但是在进行完全重启后,尽管有空格,我的变量似乎仍然可以正常工作而不需要引号。

4

当您选择运行配置时,主选项卡旁边有一个JRE选项卡,请选择“Workspace default JRE(JDK1.7)”。

请务必使用位于“Prefs->Java->Installed JREs ->Execution Environment”中的jdk。


3

我曾经遇到过同样的问题。解决方法如下: - 窗口-->首选项-->Java-->已安装的JRE-->添加... - 右键单击您的项目-->构建路径-->配置构建路径-->添加库-->JRE系统库-->下一步-->工作区默认JRE


0
嗨,我在使用Eclipse Epsilon时遇到了类似的问题。它是通过Oomph Installer安装的,该安装程序允许选择JDK。
要更改工作区/安装所使用的JDK,我必须编辑eclipse\epsilon-2-4\eclipse\eclipse.ini文件。
由于当前版本的Java不允许对内部类进行反射访问,所以这个更改是必要的:)
PATH或JAVA_HOME并没有被设置,添加/更改它也没有帮助。

0

我导航到:

Eclipse>Pref>Java>Installed JRE>Search...

其中两个弹出窗口,我检查了最新的一个。在此之前,我还去了关于>检查更新并进行了更新。我也没有重新安装任何JRE或JDK。可能是我以前做过这件事,只不过是1.6而不是1.4。希望这可以帮到你!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接