JDK 11作为JAVA_HOME?

3
JAVA_HOME环境变量可以引用JDK 11(例如jdk-11.0.8),同时在Eclipse 2020-06下运行Codename One应用程序吗?
还是必须指向JDK 8(例如jdk-1.8.0_241)?
当我将JDK 11设置为JAVA_HOME时,在Eclipse 2020-06下运行Hello World应用程序时出现以下错误:
BUILD FAILED
...[shortened for brevity]...\HiWorldPrj\build.xml:106: Unable to find a javac compiler;
com.sun.tools.javac.Main is not on the classpath.
Perhaps JAVA_HOME does not point to the JDK.
It is currently set to "C:\Program Files\Java\jre1.8.0_241"

我确定JAVA_HOME指向 JDK 11(因为我可以从命令行中回显它)。

但我认为我遇到了这个错误是因为在JDK版本9及以上中删除了tool.jar,而com.sun.tools.javac.Main曾经在tools.jar下?


你如何回显你的JAVA_HOME,以确保它指向JDK11? - Giorgi Tsiklauri
是的,命令提示符上的echo命令显示我已正确设置为JDK 11:C:> echo %JAVA_HOME% C:\Program Files\Java\jdk-11.0.8 - arastirmaci
但是Eclipse认为它没有设置为JDK11,相反它认为已经设置为JRE 8,正如您在构建错误消息中看到的那样... - arastirmaci
Eclipse有自己的内部编译器设置。请在Eclipse中检查您的Java设置。 - Elliott Frisch
我已经将“编译器兼容性级别”从1.8升级到11,无论是从“Windows菜单->首选项->Java->编译器”还是“项目特定设置”...但我仍然遇到相同的构建错误? - arastirmaci
在Eclipse中编译器的版本不会影响您使用的JDK版本。 - Evandro Pomatti
2个回答

2

是的,你可以使用JDK 11,但你的问题似乎是 JAVA_HOME 设置为了 JRE 而不是 JDK。

请参考这个答案。单独的JRE无法编译Java代码。

Perhaps JAVA_HOME does not point to the JDK.
It is currently set to "C:\Program Files\Java\jre1.8.0_241"

找到您的JDK 11目录,并将JAVA_HOME环境变量设置为该路径。
然而,我建议您在Eclipse配置选项卡中设置Java。您可以在“Windows菜单-> Java-> Installed JREs”中找到它。
更新1
看起来Codename One使用JAVA_HOME,它在build.xml中设置。所以现在请忘记我关于Eclipse变量的说法。
<property name="javaHome" value="${env.JAVA_HOME}"/>

确保你的环境变量 JAVA_HOME 已设置为 JDK 11。你可以查看如何进行设置的dos,在这里

更新2

此外,你需要将 build.xml 文件中每个 source="1.5"target="1.5" 更新为 1.811

以下是在 eclipse.ini 中进行更改的示例:

-vm
C:/Users/evand/Downloads/openjdk-11.0.2_windows-x64_bin/jdk-11.0.2/bin/javaw.exe

我应该如何配置Eclipse中的Java?一些帖子说我们可以尝试从“Windows菜单->首选项->添加运行时变量”在Eclipse中设置JAVA_HOME,但是我在Eclipse 2020-06中的“首选项”下没有“添加运行时变量”选项。 - arastirmaci
“已安装的JREs”也设置为JDK 11…因为JDK 11没有JRE目录,我将“已安装的JREs”设置为JDK(而非JRE)目录… - arastirmaci
@arastirmaci 好吧,想想也是^^'.. 很高兴能帮忙。 - Evandro Pomatti
1
感谢您提供的 eclipse.ini 提示。我不想更改我的 JAVA_HOME 环境变量设置,该设置指向 JDK 1.8。 - amitsriv99
@amitsriv99,是的,最好不要依赖于JAVA_HOME,最好让一切都是动态的。 - Evandro Pomatti
显示剩余6条评论

1
你的JAVA_HOME指向JRE,而JRE不包含Java编译器javac。你需要将JAVA_HOME环境变量指向JDK,即Java二进制文件的根目录。如果控制台在echo JAVA_HOME时打印出JDK 11的地址,则可能是你的IDE在使用时将该变量覆盖为JRE目录。或者,你的IDE可能正在使用其捆绑的JRE,而你的系统可能正在引用其他Java二进制文件(在你的情况下是JDK)。

我认为IDE没有配置覆盖此项。因为当我将JAVA_HOME设置为JDK 8时,我没有收到任何错误消息... - arastirmaci
我明确地说过,它可能会覆盖或使用自己捆绑的Java运行时,您可以重新配置它。所以你通过将其设置为Jdk8来解决了你的问题? - Giorgi Tsiklauri
如果我将JAVA_HOME设置为JDK 8,它可以工作...但是我想尽可能使用JDK 11...如何重新配置其自带的Java运行时,以便它使用JDK 11?感谢您的评论! - arastirmaci

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