我刚刚升级到 18.10。我之前使用贾布雷夫,通过 Apt 安装。现在,JabRef 无法启动。当我尝试从命令行启动它时,出现此错误:
引导层初始化时发生错误java.lang.module.FindException:未找到模块java.se.ee
到底是怎么回事?
答案1
您可以在 ubuntu 18.10 上一起安装 openjdk-11 和 openjdk-8,我只需修改 /usr/bin/jabref 如下:
#!/bin/sh
JAVA_CMD=/usr/lib/jvm/java-8-openjdk-amd64/bin/java
...
也就是说,只需将 JAVA_CMD 指向 openjdk-8,而不是 openjdk-11。
这不会损害所有其他 openjdk-11 相关应用程序。
答案2
错误是由于将 Java 运行时环境升级到版本 11 而引起的。在我的系统上,升级后我同时拥有 openjdk-8-jre 和 openjdk-11-jre。/etc/alternatives 设置支持版本 11,因此 jabref 失败。
如果您删除 jdk-11 包并仅保留版本 8,则 jabref 将照常启动。
为什么现在会发生这种情况?Ubuntu 打包提供的 jabref 启动脚本 (/usr/bin/jabref) 有这个
if ! ( echo "$JAVA_VERSION" | grep -q '1.8.0' ) ; then
# We need some options to start this version on openjdk9 and later
# See http://discourse.jabref.org/t/cannot-start-jabref-3-7-3-6-using-java-9-on-ubuntu-16-04/361/8
JABREF_JAVA_OPTS=${JABREF_JAVA_OPTS-"--add-modules=java.se.ee --add-opens=java.desktop/java.awt=ALL-UNNAMED"}
fi
但是,se-ee 模块在 JDK 9 中已被弃用,因此它们在 JDK 11 中不存在。
https://jaxenter.com/jdk-11-java-ee-modules-140674.html
我仍在检查如何修复 jabref(针对 Ubuntu 打包)。
短期解决方法是使用 Java 8 运行它。
在我们的 RedHat Linux 系统上,我们遇到了这个问题,这里的技术助理说,如果你从 Oracle 获得完整的 Java 软件包,它们仍然有所需的组件,但我不知道真相在哪里。我会继续检查。