如何在Mac上使用Oracle的新1.7 JDK运行Eclipse?

46

我正在尝试让 新的1.7 JDK 与 Eclipse(这是 Oracle 的官方版本)一起工作。

我的意思不只是将 Eclipse 指向 JDK,以便在项目中使用它,这样做是有效的,但实际上是让 Eclipse 使用 1.7 JVM 运行。

我已经将新的 JVM 移动到 Java 偏好设置列表的顶部,但 Eclipse 仍然使用 1.6 启动。如果我在 Java 偏好设置中禁用 1.6,那么在我双击 Eclipse 后立即会出现一个对话框,上面写着“无法创建 Java 虚拟机”。

编辑:我在 -vmargs 之前的 eclipse.ini 文件中添加了以下内容:

-vm
/Library/Java/JavaVirtualMachines/1.7.0.jdk/Contents/Home/bin/java

然而在Eclipse安装详情对话框中,我仍然看到:

java.runtime.version=1.6.0_31-b04-415-11M3646

编辑2: 这是我的eclipse.ini文件的内容: https://gist.github.com/2512578


1
这很奇怪。如果指定了-vm参数,我认为它应该覆盖Eclipse使用的任何其他JVM。在eclipse目录下的jre目录中是否安装了JVM?也许由于某种原因,您正在使用的特定版本的Eclipse将选择在eclipse.ini中指定的JVM而不是那个JVM。如果这没有任何进展,我会查看路径指向哪个JVM,并确定那是Eclipse正在使用的JVM。显然,更改系统的默认JRE并不是最佳解决方案,但值得研究。 - Haz
1
事实证明,Eclipse启动器的规范明确忽略了Mac上的-vm参数。请参见:http://help.eclipse.org/helios/index.jsp?topic=%2Forg.eclipse.platform.doc.isv%2Freference%2Fmisc%2Flauncher.html 在底部,它说:“MacOSX:启动器使用系统JavaVM框架,并且将始终使用JNI调用API在进程中加载vm。” - Scott Carey
有趣的是,Eclipse Kepler在启动时宣布需要Java 6,否则无法启动。然而,如果同时安装了Java 7,Eclipse实际上会在Java 7 JRE下运行,而不是启动器声称的Java 6。:( - Christopher Schultz
我刚刚经历了这个问题,并在另一个问题中发布了详细信息。 - Kevin Clifton
请确保您正在使用64位的Eclipse。在1.7的jvm上,无论采用哪种选项运行32位的Eclipse都没有成功的运行。 - tuxSlayer
显示剩余5条评论
14个回答

35

还有另一种方法。请在.ini文件中的-vmargs之前添加以下两行:

-vm 
{YOUR_JAVA_7_HOME}/jre/lib/server/libjvm.dylib

(记得这些需要分成不同的行)同时在“Info.plist”文件中添加对应的条目(在“Eclipse”键下添加或修改数组项 - 每个字符串子元素对应一个命令行参数)。

...
<key>Eclipse</key>
<array>
<string>-vm</string>
<string>/{MY_VM_HOME}/jre/lib/server/libjvm.dylib</string>
...
</array>

或者在终端中使用-vm {YOUR_JAVA_7_HOME}/lib/server/libjvm.dylib命令行参数来运行eclipse。


2
这对我有用(eclipse 3.7.1),我不知道为什么它没有被标记为正确答案。 - Alex
我确认这个方法在我的Eclipse Indigo安装中有效(在eclipse.ini和plist.info文件中)。谢谢。 - BoD
在Mavericks上尝试失败了。(1)使用/usr/libexec/java_home来确定{JAVA_7_HOME}。它给出/Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/Home。有一个lib子目录,但没有lib/server子目录。(2)我发现“在'plist.info'文件中添加相应的条目”有点简略。对我来说,最接近的等效物是Contents目录中的Info.plist(大写),但不确定要添加什么。 - bwbecker
感谢评论。@1 示例是基于JRE的。你能否根据指向libjvm.dylib的JDK更新路径?@2 是的,它是“Info.plist”。我已经纠正了它并添加了需要进行的示例更改。再次感谢 :) - Jan Arciuchiewicz
6
对于Kepler和JRE 1.7,JVM共享库"/Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/Home/jre/lib/server/libjvm.dylib"不包含JNI_CreateJavaVM符号。 - tuxSlayer
显示剩余2条评论

31

我刚刚在 https://bugs.eclipse.org/bugs/show_bug.cgi?id=339788 中发表了我的评论,关于无法在OS X上使用新的Oracle JDK与Eclipse。在eclipse.ini中使用-vm选项无效。我发现解决这个问题的唯一方法是使用以下shell脚本:

#!/bin/sh
#
export JAVA_HOME=/Library/Java/JavaVirtualMachines/1.7.0.jdk/Contents/Home
LAUNCHER_JAR=/Applications/eclipse/plugins/org.eclipse.equinox.launcher_1.2.0.v20110502.jar

java \
-showversion \
-XX:MaxPermSize=256m \
-Xms1024m \
-Xmx1024m \
-Xdock:icon=/Applications/eclipse/Eclipse.app/Contents/Resources/Eclipse.icns \
-XstartOnFirstThread \
-Dorg.eclipse.swt.internal.carbon.smallFonts \
-Dosgi.requiredJavaVersion=1.5 \
-jar $LAUNCHER_JAR

根据http://mathiasbynens.be/notes/shell-script-mac-apps上的步骤,我将上面的脚本转换成了一个应用程序,可以将其保留在我的 dock 栏中。


此外,这个链接很有趣:https://bugs.eclipse.org/bugs/show_bug.cgi?id=374792#c3 - Ashutosh Jindal
1
问题出在Eclipse 3.7的启动器二进制文件中。对于Eclipse 3.7.2,该文件是plugins/org.eclipse.equinox.launcher.cocoa.macosx.x86_64_1.1.101.v20120109-1504/eclipse_1408.so。来自Eclipse 4.x的相应的eclipse*.so可以处理Mac OS X的新Java 7版本。现在这是一个可怕的黑客行为,但如果您真的需要使用3.7.x目标平台,您可以将较新的eclipse*.so从Eclipse 4.3设置中复制到您的产品中。但是,您需要保留原始文件名,因此对于Eclipse 3.7,它仍必须使用上面的插件名称和eclipse_1408.so - Kay
1
对我没用,就像其他三个提到的解决方案一样。真的吗,在OSX Mavericks上让Eclipse工作起来这么难吗?即使是在它发布近半年之后?我在这里开了一个新线程:http://stackoverflow.com/questions/22725267/osx-10-9-mavericks-and-eclipse-kepler-4-3-2-or-m6-eclipse-luna-4-4 - Michahell
@Kay - 感谢您的技巧,已验证,这正是问题所在,并且只需替换该库即可解决。 - Dima

8
显然,Kepler的修复将在下一个服务发布中推出。
同时,在这个错误中提到了一个解决方法,可以让您在不安装苹果JRE 1.6的情况下运行eclipse:https://bugs.eclipse.org/bugs/show_bug.cgi?id=411361#c20 这将允许您从finder或spotlight启动eclipse,但不能从dock启动。
我刚在OS X Mavericks上测试过这个方法。在更新期间,jre 6会丢失,并要求在尝试启动Eclipse时进行安装。当然,我已经安装了最新的Oracle JDK 1.7。
拒绝安装后,为了解决此问题,请编辑/Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/Info.plist中的jvm功能。
<key>JVMCapabilities</key>
            <array>
                    <string>CommandLine</string>
                    <string>JNI</string>
                    <string>BundledApp</string>
                    <string>WebStart</string>
                    <string>Applets</string> 
            </array>

通过这个修复,你不需要在eclipse.ini中指定vm。

这给了我一个“无法创建Java虚拟机”的错误。附注:我已经安装并使用JDK 1.7.0_45。 - ksiomelo
这对我来说很好用,而且似乎比更改Eclipse发行版文件更整洁。但是它需要您重新启动Mac。 - Richard Gaywood
啊,太好了。在谷歌上搜索并尝试了至少20种不同的方法后,这是唯一有效的解决方案。非常感谢你。如果有人也遇到问题,请注意(如上所述)需要重新启动。我正在运行Mavericks系统。 - OptimusCrime
我曾经遇到过类似的问题,可以通过这种方式解决,但我还发现在/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/System/Library/Java/Support/Deploy.bundle添加空文件夹会导致OS X使用Oracle JDK而不需要进行修改。 - Eric3

6

在Mac上似乎不起作用。对我来说,使用Eclipse KEPLER,通过添加以下内容可以解决问题:

-vm /Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/Home/

在我的eclipse.ini文件末尾(不要换行),添加以下内容:

-vm /Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/Home/bin/../jre/lib/server/libjvm.dylib

这样可以更改Eclipse Installation Details > Configuration中的设置为:

-vm /Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/Home/bin/../jre/lib/server/libjvm.dylib

但是这种方法不能用于Eclipse INDIGO版本。


3

在安装了Oracle JRE和JDK之后,打开Eclipse.app中的Info.plist文件(右键单击,显示内容),并在“Eclipse”后面粘贴以下内容:"-vm/System/Library/Frameworks/JavaVM.framework/JavaVM"。

我的看起来是这样的:

    <key>Eclipse</key>
    <array>
        <string>-vm</string><string>/System/Library/Frameworks/JavaVM.framework/JavaVM</string>
        <string>-keyring</string><string>~/.eclipse_keyring</string>
        <string>-showlocation</string>
    </array>

如果您这样做,升级JRE后就不必更新文件了。

这是我唯一可行的解决方案,尽管我尝试了很多其他步骤。如果您遇到问题,建议您确保安装了最新版本的Eclipse和JDK,然后尝试此答案。在安装JDK 7之前,我通过标准操作系统提示安装了Java 6,不确定是否有帮助或伤害。 - Hayes Haugen

2

请确认你的java_home路径是否正确,应该在/usr/libexec/java_home下;

不要更改eclipse.ini文件,而是编辑Info.plist文件并添加/更改以下行:< string>-vm< /string>< string>/Library/Java/JavaVirtualMachines/'jdk-version-your'/Contents/Home/bin/java< /string>,然后保存。打开Eclipse即可完成!

对我来说,这很有效,可以使用javafx e(fx)clipse!

PS:在Mac OS X系统上,你可以通过右键单击(或Ctrl+单击)Finder中的Eclipse可执行文件,在弹出的菜单中选择“显示包内容”,然后在Contents文件夹中找到Info.plist文件。


2

编辑即可

Eclipse.app/Contents/Info.plist

您需要使用特定的Java版本(而不是平台默认版本),请取消以下选项之一的注释:

<string>-vm</string>
<string>/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/bin/java</string>

这帮助我从1.7.0回滚到1.6.0。


1
我刚遇到了这个问题。通过降级并下载JDK 7解决了它。

1

假设您正在使用支持Java 7的Eclipse版本(我相信任何3.7及以上版本),则应该能够在eclipse.ini文件中指定Eclipse使用的JVM。如果您打开它,您应该会看到一个“-vm”属性,后面跟着您当前使用的JVM目录。您应该只需将此目录更改为1.7安装目录即可。

注意:我没有在Mac上使用过Eclipse,因此配置文件的名称可能不同。


3
eclipse.ini 的格式非常特殊,在 Mac OS X 上找到它有点棘手。请参考 http://wiki.eclipse.org/Eclipse.ini。 - E-Riz
感谢提供这个优秀的链接。我之前不知道eclipse.ini中选项的具体排序方式。 - Haz

1

截至2012年07月03日,它被标记为[bug 374791](https://bugs.eclipse.org/bugs/show_bug.cgi?id=374791)的重复项,该问题被标记为已解决但在我的Eclipse 4.2上仍无法工作。 - Daniel Serodio

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