Java13和Eclipse的奇怪行为

3
我正在尝试在Linux系统上使用Java 13和Eclipse。我想创建一个“便携式”java + eclipse文件夹,可以在多台机器之间移动。我已经从以下链接下载并解压缩了Java 13和Eclipse:
Java 13: https://www.oracle.com/technetwork/java/javase/downloads/jdk13-downloads-5672538.html Eclipse: https://www.eclipse.org/downloads/download.php?file=/eclipse/downloads/drops4/S-4.13RC1-201908281800/eclipse-SDK-4.13RC1-linux-gtk-x86_64.tar.gz 并且在Eclipse市场中,我已经安装了所有部分的插件:https://download.eclipse.org/eclipse/updates/4.13-P-builds
我已将JDK设置为JDK13文件夹下的文件路径。结果是,Eclipse可以编译我的Java 13代码,但无法运行它。当我尝试运行代码时,会出现以下错误:
[..]/EclipseJava13/jdk-13/bin/java: symbol lookup error: [..]/EclipseJava13/jdk-13/bin/java: undefined symbol: JLI_InitArgProcessing

我可以使用以下命令从命令行编译并运行Java13,没有任何问题:

../../../jdk-13/bin/javac --release 13 --enable-preview main/Main.java
../../../jdk-13/bin/java --enable-preview main.Main

如果我复制粘贴由Eclipse生成的*.class文件,那我可以使用命令来运行它们。
../../../jdk-13/bin/java --enable-preview main.Main

没问题。因此,Eclipse已经识别出Java 13,并可以正确编译Java 13代码。

但是...当我尝试从Eclipse内部运行时,就会出现那个错误。 我不确定接下来该怎么做。


你可以查看这个链接 - https://stackoverflow.com/questions/53675535/java-symbol-lookup-error-for-jli-initargprocessing-when-running-with-setcap-ca - Sujay Mohan
1
请展示Eclipse使用的命令行:在运行配置中,有一个“显示命令行”按钮。 - howlger
请注意,您已安装了2019-09(4.13)的RC1版本。此后发布了RC2和RC2a版本 - 最终版本在https://download.eclipse.org/eclipse/downloads/drops4/R-4.13-201909161045/上发布。 - greg-449
以下是show命令行输出: /[..]/EclipseJava13/jdk-13/bin/java -ea --enable-preview -Dfile.encoding=UTF-8 -p /[..]/EclipseJava13/workspaceTest/TestSwitch/bin --enable-preview -m testSwitch/main.Main当然,我尝试从控制台运行这个确切的命令行,而且...它可以正常工作。不知何故,Eclipse在具有不同特权的环境中运行Java。 - Marco Servetto
我也按照Greg的建议重新安装了Eclipse,但是没有任何改变。 - Marco Servetto
2个回答

2

好的,我已经发现了问题。 Eclipse本身是一个Java程序。 在我的机器上,我也安装了Java8, eclipse正在使用Java8运行。 Java8在环境中预加载了一个包含符号JLI_InitArgProcessing的库的版本。因此,当在同一环境中运行Java 13时,它会尝试重用此库的缓存版本。 如果我使用Java13启动eclipse,则没有问题。


1

关于“您不需要添加--release 13”的小澄清:实际上比这更严重。您绝对不能将**--release 13**添加到“默认VM参数”中。如果这样做,您将在控制台窗口中收到错误消息“未识别的选项:--release”,并且您的Java 13应用程序将无法运行。在“默认VM参数”中不指定任何内容即可正常使用Java 13预览功能。 - skomisa
我对这个答案感到非常困惑:从命令行中,我需要添加以下任一选项才能编译: --release 13 --enable-preview 或者 -source 13 --enable-preview 无论如何,我的问题在于运行它时,编译都很顺利。 - Marco Servetto
@MarcoServetto 这个回答的意思是,通过使用新发布的Eclipse R-4.13-201909161045/,您不需要添加任何13选项,因为默认情况下它与Java 13兼容。官方支持,而不是“作为预览”。但我看到你已经发现了一个路径问题。 - VonC

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