SDKMAN!在Mac上无法与Eclipse.app或SpringToolSuite4.app一起使用。

16

这与以下问题类似: Eclipse无法找到使用sdkman安装的jdk

我在Mac(macos-mojave)上仍然遇到此问题。

我的两个

/usr/bin/java
/usr/bin/javac 

指向

/System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java
/System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/javac

SDKMAN!会为SDKMAN!的默认Java版本安装正确的javajavac

因此,我有了正确的javajavac

% java -version
openjdk version "11.0.3" 2019-04-16
OpenJDK Runtime Environment AdoptOpenJDK (build 11.0.3+7)
OpenJDK 64-Bit Server VM AdoptOpenJDK (build 11.0.3+7, mixed mode)

% javac -version
javac 11.0.3

然而,我在这台设备上没有安装任何Java版本:

ls -la /Library/Java/JavaVirtualMachines 
total 0
drwxr-xr-x  2 root  wheel   64 Jun 19 10:06 .
drwxr-xr-x  4 root  wheel  128 Apr 16 06:16 ..

编辑:

我也尝试更新了/Applications/SpringToolSuite4.app/Contents/Eclipse/SpringToolSuite4.ini中的JVM引用(类似于Eclipse.ini):

-vm
/Users/johndoe/.sdkman/candidates/java/current/bin/java
-startup
../Eclipse/plugins/org.eclipse.equinox.launcher_1.5.300.v20190213-1655.jar
--launcher.library
../Eclipse/plugins/org.eclipse.equinox.launcher.cocoa.macosx.x86_64_1.1.1000.v20190125-2016
-product
org.springframework.boot.ide.branding.sts4
--launcher.defaultAction
openFile
-vmargs
-Dosgi.requiredJavaVersion=1.8
-Xms256m
-Xmx1024m
-XX:+UseG1GC
-XX:+UseStringDeduplication
--add-modules=ALL-SYSTEM
-XstartOnFirstThread
-Dorg.eclipse.swt.internal.carbon.smallFonts
-Xdock:icon=../Resources/sts4.icns

虽然我能够看到 STS 的启动画面,但是它仍然报告没有JVM已安装 (见截图)

SpringToolSuite 启动画面 需要Java SE 6运行时的遗留问题

同时,看起来 Eclipse.appSpringToolSuite4.app 都要求传统方式安装正确的 JDK,而不能使用 SDKMAN!

我真的不想安装除了 SDKMAN! 以外的另一个 JDK。

有人让这个工具正常工作了吗?

谢谢!


嗨 @nevenc,你找到解决方案了吗?我也遇到了完全相同的问题。 - jumping_monkey
嘿@jumping_monkey,不幸的是,那正是我所做的。安装了一个旧的标准JDK,然后在STS(eclipse)项目中更新了特定的运行时。 - nevenc
嘿@nevenc,感谢您的回复。所以,这是Spring Tool Suite的“安装问题”,我希望他们有一天会“修复”它。无论如何,我们有解决方法。兄弟干杯。 - jumping_monkey
1
不必下载Oracle的JDK,我不想登录并批准他们的许可协议。您可以从https://adoptopenjdk.net/下载OpenJDK,它将安装到`/Library/Java/JavaVirtualMachines`。 STS将正常启动,SDKMAN可用于其他所有内容。 - janih
我曾经遇到过同样的问题,我在eclipse.ini文件中添加了以下内容: -vm /Users/johndoe/.sdkman/candidates/java/current/bin/java关键是这些行应该是文件中的第一行。 - kamran ghiasvand
显示剩余2条评论
3个回答

7
以下是我在MacOS Catalina上实现[1]的步骤:
我需要在我的eclipse.ini文件中设置-vm路径为:
/Users/<YOUR_USER>/.sdkman/candidates/java/current/lib/jli/libjli.dylib

据说在MacOS上,Eclipse总是使用JNI调用来加载VM [2],因此我不得不使其指向libjli.dylib而不是常规的java可执行文件。

链接:
[1] 感谢:https://bugs.eclipse.org/bugs/show_bug.cgi?id=549813
[2] https://help.eclipse.org/2020-03/index.jsp?topic=%2Forg.eclipse.platform.doc.isv%2Freference%2Fmisc%2Flauncher.html&cp%3D2_1_5_1


不得不将其设置为/Users/<YOUR_USER>/.sdkman/candidates/java/current/lib/jli/libjli.dylib,但它可以工作! - Roland
它可用。我的设置为macOS Catalina 10.15.6和Eclipse Memory Analyzer Version 1.10.0。但是对于openjdkb 14.0.2,libjli.dylib现在位于lib库下(而不是lib/jli)。 ~/.sdkman/candidates/java/current/lib/libjli.dylib - moleksyuk
在我的 macOS Catalina 10.15.7 上,成功运行了 JDK 11.0.2。谢谢。 - Shahzad

5
如果Eclipse启动器找不到适合的JVM运行(我假设这是问题所在),您通常可以通过将“eclipse.ini”(或者如果有的话,“STS.ini”)指向您选择的JVM来解决此问题。
要实现这一点,请在文本编辑器中打开“.ini”文件,并在文件前面添加两行。类似于这样的内容:
-vm
/usr/lib/jvm/jdk-1.8.0/bin/java
... the rest of the file unchanged...

请注意以下几点:

1) 这些行应该是文件中的第一行

2) 它们需要在两行不同的位置(不要试图将-vm和JVM可执行文件路径放在同一行,这样做是不行的)。


我已经重新编辑了问题@Kris。不幸的是,那并没有起作用 :( 问题仍然存在! - nevenc
好的,抱歉那个方法不起作用,这似乎不是典型的“找不到JVM来运行Eclipse”的问题,我也不确定该如何解决 :-( - Kris
1
这些行是文件中的第一行,这对我来说是关键点。 - Jacob Wallace

0

我在macOS Sierra上遇到了这个问题,当我尝试使用SDKMAN!安装的OpenJDK 11.0.2和Eclipse 2019-06一起使用时。没有安装其他SDK。

macOS似乎始终拒绝启动Eclipse.app,即使我提供了Info.plisteclipse.ini中几乎所有-vm参数的组合,除了链接到/System/Library/

这是我的有效设置:

  1. 我使用了sdk default java 11.0.2-open而不仅仅是sdk use。 我确保SDKMAN!正确地将JDK命令二进制文件符号链接到/System/Library路径中:
lrwxr-xr-x  1 root  wheel  75  1 Mai  2017 /usr/bin/java -> /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java

尽管符号链接目标不再是链接,但它是SDKMAN!部署在那里的二进制文件。使用-version检查它。

  1. 我确保Info.plist中没有出现<string>-vm</string>参数。所有都被注释掉了。

  2. 我的eclipse.ini中的-vm参数是:

-vm
/System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java

如先前所述,请确保此语句出现在-vmargs之前。

这最终使我能够通过在Finder中双击或直接启动eclipse二进制文件来启动最新的Eclipse。希望这也适用于STS。

祝好运。


1
“我确保SDKMAN!正确地将JDK命令二进制文件符号链接到/System/Library路径中”,你是什么意思?你手动创建了符号链接吗? - lorenzo-bettini

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