autotest@thor2:~$ sudo update-alternatives --config java There is 1 choice for the alternative java (providing /usr/bin/java). Selection Path Priority Status ------------------------------------------------------------ 0 /usr/lib/jvm/java-17-openjdk-amd64/bin/java 1 auto mode * 1 /usr/lib/jvm/java-17-openjdk-amd64/bin/java 1 manual mode Press <enter> to keep the current choice[*], or type selection number: autotest@thor2:~$ which java /usr/lib/jvm/java-17-openjdk-amd64/bin/java 不对啊 没改变
时间: 2025-05-19 18:13:58 浏览: 17
### 如何正确使用 `update-alternatives` 配置 Java 默认版本 OpenJDK-17
为了配置系统的默认 Java 版本,可以利用 Linux 提供的工具 `update-alternatives` 来管理多个安装的 Java 版本。以下是关于如何通过该命令来设置 OpenJDK-17 成为默认 Java 的方法。
#### 使用 `update-alternatives` 安装新替代项
如果尚未注册新的 Java 替代项到系统中,则需要手动将其添加至 `update-alternatives` 系统:
```bash
sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/java-17-openjdk-amd64/bin/java 1700
sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/java-17-openjdk-amd64/bin/javac 1700
```
上述命令中的优先级数值(如这里的 `1700` 和之前的例子中的 `3000`[^1]),决定了当用户未指定特定版本时,默认会选择哪个版本作为首选项。较高的数字表示更高的优先级[^2]。
#### 设置默认 Java 版本
一旦所有的 Java 实现都被加入到了 alternatives 列表里,就可以运行下面这条指令让用户交互式地选择所需的默认版本:
```bash
sudo update-alternatives --config java
```
对于编译器部分同样适用:
```bash
sudo update-alternatives --config javac
```
这会展示当前可用的所有已登记过的 Java 或 Javac 路径及其对应的优先级,并允许管理员从中挑选一个设成全局默认值[^2]。
#### 关于为何某些选项不显示的问题
有时即使已经执行过 install 命令,但在 config 步骤下仍看不到预期的选择项目。可能的原因有以下几个方面:
- **路径错误**: 如果提供的二进制文件位置不对或者不存在的话,那么这个条目就不会被识别并列出。
- **权限不足**: 尝试以 root 用户身份重新操作一次这些命令。
- **重复定义冲突**: 当存在相同名称但不同编号的 entries 时可能会引起混乱;建议先清理旧记录再新增加最新的 ones.
#### 开发环境下的多版本切换策略
针对提问者提到的具体场景——即分别采用不同的 JDK 进行 Arduino 及 Eclipse/Android 应用开发的需求,可以通过如下方式实现灵活切换而无需频繁修改系统范围内的 defaults:
创建 shell scripts 文件用于快速改变 JAVA_HOME 环境变量指向目标 jdk home directory 并刷新 PATH 中的相关内容。例如分别为 arduino_jdk.sh 和 eclipse_jdk.sh 编写脚本来调整各自的构建需求所依赖的不同版本号。
另外也可以考虑借助 sdkman! 工具简化日常管理工作流程,它支持多种编程语言平台包括但不限于 groovy, scala etc., 同样适用于管理多个独立隔离出来的 java distributions instances across projects easily without affecting system-wide settings at all times.
```bash
#!/bin/bash
export JAVA_HOME=/path/to/openjdk6
export PATH=$JAVA_HOME/bin:$PATH
echo "Switched to $JAVA_HOME"
```
保存以上代码片段为可执行 script (e.g., `arduino_jdk.sh`) ,然后 source 执行即可即时生效对应设定好的那个具体版本。
```bash
source ./arduino_jdk.sh
```
同理制作另一个名为 `eclipse_jdk.sh` 的脚本替换其中 OPENJDK6 的路径为你实际使用的 SUN_JDK7 地址。
最后提醒一点,在每次启动 IDEs之前记得按照计划调用了相应的初始化脚本!
---
阅读全文
相关推荐















