news 2026/2/10 3:21:51

WSL2 / Ubuntu 下用 SDKMAN 管理多版本 Java(项目级切换,真香)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
WSL2 / Ubuntu 下用 SDKMAN 管理多版本 Java(项目级切换,真香)

WSL2 / Ubuntu 下用 SDKMAN 管理多版本 Java(项目级切换,真香)

在 WSL2 + Ubuntu 做 Java 后端开发时,经常会遇到这种组合:

  • 老项目还在 Java 8
  • 新项目已经是 Java 17 / 21
  • 同一台机器、同一个终端,需要随时切换 JDK 版本
  • Maven、脚手架脚本、命令行工具都要跟着走

如果你还在来回改JAVA_HOME,强烈建议上 SDKMAN。


一、SDKMAN 是什么,为什么适合 WSL2?

SDKMAN(Software Development Kit Manager)是 Linux/WSL 下专门用来管理多版本 JDK/SDK 的命令行工具。

它的几个关键特性非常适合日常开发:

  • 同时安装多个 Java 版本(8/11/17/21 随便切)
  • 一行命令切换 JDK,立刻生效
  • 支持「项目级」固定 Java 版本(靠.sdkmanrc
  • 不污染系统全局环境变量
  • Maven、Gradle、脚本直接跟随当前java

对 WSL2 开发者来说,这几乎是目前体验最佳的多 JDK 管理方案。


二、在 Ubuntu / WSL2 安装 SDKMAN(一劳永逸)

在你的 Ubuntu / WSL2 终端中执行(保持网络能访问外网):

curl -s "https://get.sdkman.io" | bash

安装完成后,加载环境(新开终端也可以):

source "$HOME/.sdkman/bin/sdkman-init.sh"

验证是否安装成功:

sdk version

如果能正常输出版本信息,说明 SDKMAN 已经装好了。


三、用 SDKMAN 安装多个 Java 版本

1. 查看可用 Java 版本

sdk list java

常见推荐(以 Temurin 为例):

  • Java 8:8.0.xxx-tem
  • Java 17:17.0.xxx-tem

2. 安装 Java 8 和 Java 17(示例)

sdk install java 8.0.392-tem sdk install java 17.0.10-tem

查看本机已安装的版本:

sdk list java | grep installed

到这一步,你的 WSL2 环境里已经有多套 JDK 可以随时切换了。


四、全局切换 Java 版本(当前终端立即生效)

想在当前终端切到 Java 17:

sdk use java 17.0.10-tem

验证一下:

java -version javac -version

效果是:

  • 当前 shell 立刻使用 Java 17
  • Maven、脚手架、命令行工具都会跟着用这一套 JDK

如果想把某个版本设成「默认版本」(全局默认),可以用:

sdk default java 17.0.10-tem

五、核心功能:项目级 Java 版本固定(强烈推荐)

这一块基本是 SDKMAN 的「杀手级」功能:让每个项目有自己的 Java 版本配置。

1. 进入项目目录

cd ~/project/mom/admin

2. 初始化项目环境

sdk env init

执行后,项目根目录下会生成一个.sdkmanrc文件。

3. 编辑.sdkmanrc

nano .sdkmanrc

写入你想绑定的 JDK 版本,例如:

java=17.0.10-tem

保存退出即可。

4. 启用项目级 Java 版本

在项目目录中执行一次:

sdk env

或者直接开启自动模式(推荐):

sdk config set sdkman_auto_env true

之后的体验就是:

  • 每次cd进该项目目录,Java 自动切到 17
  • 离开目录,Java 自动恢复为全局默认版本

多项目并行开发时,这一点可以极大降低「切错 JDK」导致的各种莫名报错。


六、SDKMAN + Maven + 工具钾 的实际效果

在项目目录中执行:

java -version mvn -v

通常会看到:

  • java版本就是.sdkmanrc中配置的那一套
  • mvn使用的是同一套 JDK(JAVA_HOME由 SDKMAN 管理)

此时,让脚本或工具去执行mvn compile,就不会再遇到类似:

invalid target release: 17

这类因为 JDK 不匹配导致的构建错误,也不需要手动调环境变量、改 IDE 里的 JDK 配置。


七、对比常见几种方案

下面简单对比一下几种常见的多 JDK 管理方式:

方案是否推荐说明
update-alternatives⚠️ 一般只适合全局切换,项目混用不方便
手动改 JAVA_HOME❌ 不推荐容易忘、步骤多、极易出错
SDKMAN(推荐)✅ 强烈推荐支持项目级自动切换,配置干净

在 WSL2 / Ubuntu 环境下,SDKMAN 的易用性和可维护性基本是完胜。


八、实践中的一些小建议(踩坑总结)

结合实际踩坑经验,有几条可以直接遵循:

  • 让「Java 版本随项目走」,不要随系统走
  • 老项目固定在 Java 8,新项目用 Java 17 / 21,可以长期共存
  • 用 SDKMAN 统一管理 JDK,多 Maven 版本的话可以配合 Maven Toolchains 兜底
  • 尽量避免再手动改JAVA_HOME等系统环境变量

如果你同时在用:

  • Maven / Gradle
  • Spring Boot / 微服务项目
  • 多个项目并行开发(单体 + 微服务 / 新老系统)
  • 甚至本地脚本、自动化工具

那么「SDKMAN + 项目级.sdkmanrc」会让环境切换这件事变得非常顺手。


九、最后的一句话总结

在 WSL2 / Ubuntu 下做 Java 开发,SDKMAN 基本可以视为多版本 JDK 管理的「默认解」。

只要把「每个项目都配一份.sdkmanrc」养成习惯,环境切换这件事基本就从你的日常心智负担里消失了。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/5 4:58:33

启动进程,并返回新进程id(C++源码)

1、概述 启动进程,并返回新进程id,支持场景: 1、支持绝对路径: C:\Program Files\Google\Chrome\Application\chrome.exe 2、支持环境变量路径:%localappdata%\\Feishu\\Feishu.exe 1.1、调用示例 // 调用示例// 启动进程,并返回新进程id// 支持绝对路径: C:\Program Fil…

作者头像 李华
网站建设 2026/2/8 15:17:02

PDF压缩

winnzip项目pdf压缩部分/*** 压缩PDF文件* param inputFile 输入PDF文件路径* param outputFile 输出PDF文件路径* param compressionLevel 压缩等级: 0小尺寸, 1中等尺寸, 2大尺寸* param lossless 是否无损压缩* return 压缩是否成功*/使用Ghostscript命令行方式进行pdf压缩&…

作者头像 李华
网站建设 2026/2/6 22:00:46

国产自主芯片加持!光润通FF-904E-V3.0千兆四光口网卡深度解析与应用场景

在企业级网络、数据中心建设中,网卡作为数据传输的核心枢纽,其性能、稳定性与自主可控性直接决定了整个网络架构的可靠性与安全性。近年来,国产网络硬件崛起,越来越多的企业开始选择自主研发的网络设备。今天就为大家深度解析一款…

作者头像 李华
网站建设 2026/2/8 22:06:28

【开题答辩过程】以《基于python的气象灾害数据分析与可视化系统》为例,不知道这个选题怎么做的,不知道这个选题怎么开题答辩的可以进来看看

个人简介慕婉学姐精通Java、PHP、微信小程序、Python、Golang和安卓开发等语言,擅长开发大数据、深度学习、网站、小程序、安卓应用和算法项目。平时从事项目定制开发、代码讲解、答辩教学和文档编写,也掌握一些降重技巧。感谢大家的持续关注&#xff01…

作者头像 李华
网站建设 2026/2/7 18:59:14

NestJs-拦截器

NestJS 拦截器概述拦截器(Interceptor)是 NestJS 的核心功能之一,用于在方法执行前后添加额外的逻辑。拦截器基于面向切面编程(AOP)思想,常用于日志记录、性能监控、响应格式统一等场景。拦截器的核心功能 …

作者头像 李华
网站建设 2026/2/7 16:50:51

谓的“完美本地环境”,是不是开发者体验(DX)最大的谎言?

我扔掉了本地的 Docker 和 VSCode,开发效率反而提升了10倍“在我电脑上明明是好的”,这句话我曾说过无数次,也听过无数次。每次新项目启动或新同事入职,我们总要浪费大量时间在配置开发环境上,过程痛苦且极易出错。我曾…

作者头像 李华