在 32 位 Raspberry 中将 Java 16 升级到 Java 17

Upgrade Java 16 to Java 17 in 32bit Raspberry

安装最新版本的 Java 总是有点乱,我想看看我是否一切正常。 我目前在这个路径 Java 16 /usr/lib/jvm/adoptopenjdk-16-hotspot-armhf

我遵循了以下教程2) Install OpenJDK 17 on Debian 10/9,一切顺利。

我的JAVA_HOME是对的,设置为/opt/jdk17,但是我的java --version还在用Java16.

java --version
openjdk 16.0.1 2021-04-20
OpenJDK Runtime Environment AdoptOpenJDK-16.0.1+9 (build 16.0.1+9)
OpenJDK Server VM AdoptOpenJDK-16.0.1+9 (build 16.0.1+9, mixed mode)

其他有用信息

pi@raspberrypi:~ $ which java
/usr/bin/java

pi@raspberrypi:~ $ echo $PATH
/home/pi/.local/bin:/bin:/home/pi/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games

我的 PATH 变量似乎不包含 /opt/jdk-17 但即使在 运行 source /etc/profile.d/jdk.sh/opt/jdk-17 存在之后, java --version 仍在使用 Java 16.

根据各种评论...

  1. 您在 /opt/jdk17
  2. 中安装了 Java 17 ... 手动 ...
  3. JAVA_HOME 指向 Java 17 安装的基础。我假设有(例如)一个 /opt/jdk17/bin/java 可执行文件。
  4. Java 17 安装目录不在命令搜索路径上 (PATH)。
  5. 搜索路径正在查找 /usr/bin/java ... 当您 运行 java -version.
  6. 时(在您的情况下)说 Java 16
  7. 您的系统安装了“/etc/alternatives”系统,但sudo update-alternatives --config java表示只有Java 16可用。

所以...

“替代”机制创建并维护各种可切换命令的符号链接。例如,如果您 运行 ls -l /usr/bin/java,我希望您会看到它是一个符号链接。当您 运行 update-alternatives 时,它会尝试更新符号链接。但它只能对它知道的命令和命令版本执行此操作。

现在... update-alternatives 不知道 Java 17。它不知道它已安装,也不知道它安装在哪里。

如果您从包管理器安装了 Java 17,那么告诉 update-alternatives 关于 Java 17 的配置文件也会被添加。

解决方案,从“最佳”(1) 到“最差”排序。

  1. 删除 Java 17 的手动安装并从包管理器安装它。您可能需要找到/添加一个“实验性”Debian 软件包仓库来执行此操作。 (我的印象是官方的 Debian 回购管理器在挑选新东西方面往往相当缓慢。)

  2. 仔细阅读man 1 update-alternativesupdate-alternatives --help中的文档,然后使用--install--slave命令告诉它关于Java 17.

  3. 找到 Java 符号链接并手动将它们替换为指向 Java 17 版本可执行文件的符号链接。 (小心...)

  4. /opt/jdk17/bin 添加到 PATH 的开头。 (小心...)

  5. 只需使用完整路径名;例如/opt/jdk17/bin/java 而不是 java.


我也遇到了这个:

  • Java 17 on the Raspberry Pi 其中包括(除其他外)用于将 Java 17 添加到替代系统的示例命令。它还提到使用 sdkman.

  • How to Install Java 17 (JDK 17) on Debian 11。有评论说:

    "Awesome! Thanks. This Debian package works on Raspberry Pi's Raspian 64-bit Bullseye as of posting. Only method that works without manually downloading packages and attempting to install. :)".

    但是我看到你有一个 32 位 Raspberry Pi ...