惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Microsoft Azure Blog
Microsoft Azure Blog
有赞技术团队
有赞技术团队
IT之家
IT之家
博客园 - 聂微东
Jina AI
Jina AI
Hugging Face - Blog
Hugging Face - Blog
Last Week in AI
Last Week in AI
Apple Machine Learning Research
Apple Machine Learning Research
WordPress大学
WordPress大学
小众软件
小众软件
爱范儿
爱范儿
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
V
Visual Studio Blog
雷峰网
雷峰网
酷 壳 – CoolShell
酷 壳 – CoolShell
阮一峰的网络日志
阮一峰的网络日志
宝玉的分享
宝玉的分享
博客园 - 三生石上(FineUI控件)
大猫的无限游戏
大猫的无限游戏
博客园 - Franky
量子位
月光博客
月光博客
博客园 - 【当耐特】
博客园 - 叶小钗

博客园 - 悠哉大斌

AI治好了我的linux桌面恐惧症 全新Qoder CN (非Qoder CN IDE)技术架构分析 AI Agent 安全沙箱技术对比:E2B、Cube Sandbox 与 Docker Sandboxes linux 升级 claude code的坑 debian(WSL) apt 代理配置 linux内核之Namespaces、Cgroups、Capabilities、Seccomp和Landlock 大语言模型推理中的隐藏瓶颈及其解决方法 Docker Sandboxes 技术是什么,和docker容器有什么区别 什么是 Docker Agent以及一个Docker Agent示例 claude Code 和 codex 作为编程代理,前者使用typescript开发,后者使用rust,他们的决策依据是什么 Java 并发编程发展史与 java.util.concurrent 全景解析 LLM 真的改变了编码风格吗? 如果人工智能会犯错且不精确,为什么它正在改变世界? Python 的协程模型和 JavaScript 的 async/await python闭包和function.__closure__特殊属性 python 的 dunder name和 sunder name 基于nodejs设计REST API的知名开源框架 windows上使用node-oracledb Thick 模式连接 Oracle 11g Claude Code CLI连接 DeepSeek V4模型后调用报400错误 python里对象(object)到底是什么 Python 泛型演变史 Python 类型别名的演变 Python 类型提示的演变史 PEP 593 新增的Annotated 类型 Alibaba AgentScope 和 microsoft agent framework 详细对比分析 spring AI Alibaba Agent Framework 和 agentscope有什么区别和联系 AI Agent协作模式以及主流开源框架对协作模式的支持 Tailscale 是如何接管 DNS 的? Agent = Model + Harness 使用rust编写typescript编译器的难点在什么地方,哪些数据结构是rust不擅长的?
windows wsl 安装 Temurin® JDK
悠哉大斌 · 2026-06-04 · via 博客园 - 悠哉大斌

一、通过包管理器安装(推荐)

通过 apt 安装 Temurin® JDK(其默认安装路径通常是 /usr/lib/jvm/)

# 1. 安装必要工具(如果尚未安装)
sudo apt update
sudo apt install -y wget apt-transport-https gpg lsb-release

# 2. 创建 keyrings 目录(如果不存在)
sudo mkdir -p /etc/apt/keyrings

# 3. 下载并转换 GPG 密钥,保存到 /etc/apt/keyrings/ 目录
wget -qO - https://packages.adoptium.net/artifactory/api/gpg/key/public | \
    gpg --dearmor | \
    sudo tee /etc/apt/keyrings/adoptium.gpg > /dev/null

# 4. 设置密钥文件的权限(只读,仅 root 可访问)
sudo chmod 644 /etc/apt/keyrings/adoptium.gpg

# 5. 添加 APT 仓库,并在 sources.list 中明确绑定该密钥
# 注意:$(lsb_release -cs) 会自动获取当前系统的代号(如 jammy, noble)
echo "deb [signed-by=/etc/apt/keyrings/adoptium.gpg] https://packages.adoptium.net/artifactory/deb $(lsb_release -cs) main" | \
    sudo tee /etc/apt/sources.list.d/adoptium.list

# 6. 更新软件源并安装 JDK
sudo apt update

# 安装 temurin-17-jdk
sudo apt install -y temurin-17-jdk

# 安装 temurin-25-jdk
sudo apt install -y temurin-25-jdk

# 7. 检查是否安装成功
java -version

# 查询安装目录
readlink -f $(which java)

二、如何查看所有已安装的 Java 版本并切换

同时安装 temurin-17-jdktemurin-25-jdk 后,系统的默认 Java 版本通常由 update-alternatives 机制决定。一般情况下,最后安装的版本会成为默认版本(因为安装过程中会将自身注册为 auto 模式下的最高优先级)。但实际默认版本取决于每个 JDK 在 update-alternatives 中的优先级(priority)设置,而不同包的维护者可能设定不同的优先级数值。

🔍 如何查看当前默认版本

运行以下任一命令即可看到当前激活的 Java 版本:

java -version

或者

javac -version

🧰 如何查看所有已安装的 Java 版本并切换

使用 update-alternatives 命令:

sudo update-alternatives --config java

系统会列出所有已注册的 Java 版本,例如:

There are 2 choices for the alternative java (providing /usr/bin/java).

  Selection    Path                                            Priority   Status
------------------------------------------------------------
* 0            /usr/lib/jvm/temurin-25-jdk/bin/java             2500      auto mode
  1            /usr/lib/jvm/temurin-17-jdk/bin/java             1700      manual mode
  2            /usr/lib/jvm/temurin-25-jdk/bin/java             2500      manual mode

Press <enter> to keep the current choice[*], or type selection number:
  • * 的即为当前默认版本。
  • 输入对应的数字(如 1)并按回车,即可切换默认版本。

同样,对于 javac 等工具,也可以单独配置:sudo update-alternatives --config javac

📌 补充说明

  • 优先级规则update-alternativesauto 模式会选择优先级最高的版本。JDK 25 的优先级通常高于 JDK 17,因此很可能自动选 JDK 25。如果希望固定使用某个版本,可以在 --config 中手动选择(会切换为 manual 模式)。
  • 环境变量干扰:如果之前手动设置了 JAVA_HOME 并在 PATH 中优先指向了某个版本,可能会覆盖系统默认。检查 echo $JAVA_HOMEwhich java 可以排除这种干扰。

如果你希望默认使用 JDK 17,只需运行 sudo update-alternatives --config java 并选择 17 的序号即可。

三、注意

  • /etc/apt/trusted.gpg.d/:是旧时代的全局信任区。里面任何一个密钥都能用来验证所有软件源,存在“城门失火,殃及池鱼”的安全风险,因此已不推荐用于第三方软件源。
  • /etc/apt/keyrings/:是新时代的隔离存放处。它将不同源的密钥隔离开,并在仓库配置中明确指定,实现了“一把钥匙开一把锁”的信任隔离,是目前推荐的安全做法。