# okm **Repository Path**: fishep/okm ## Basic Information - **Project Name**: okm - **Description**: jmv is a minimal OpenJDK manager backed by the TUNA Adoptium mirror. - **Primary Language**: Go - **License**: Apache-2.0 - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-05-02 - **Last Updated**: 2026-05-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # jmv — 极简 OpenJDK 版本管理器 `jmv` 是一个轻量级的 OpenJDK 版本管理器,基于 TUNA Adoptium 镜像源,可快速安装和切换 JDK/JRE 版本。 它将 JDK 或 JRE 安装到本地 `JMV_HOME` 目录,通过 Shim 机制暴露已激活的 Java 命令,无需反复修改 `PATH`。 ## 特性 - **Shim 机制激活**:在 `$JMV_HOME/shims` 目录生成包装脚本,自动路由到当前激活的 Java 版本 - **会话级 / 全局版本切换**:`use` 仅影响当前终端会话,`default` 设置持久默认版本 - **国内镜像加速**:默认使用 TUNA(清华大学)Adoptium 镜像源,下载快速稳定 - **跨平台支持**:支持 Linux、macOS、Windows,覆盖 amd64 和 arm64 架构 ## 安装 ### 一键安装 ```bash curl -fsSL https://gitee.com/fishep/okm/releases/download/v0.1.0/install.sh | sh ``` 安装程序会自动下载对应平台的 `jmv` 二进制文件,安装到 `$HOME/.local/bin`,创建 `$HOME/.jmv` 目录,并将所需环境变量写入 Shell 配置文件(Bash、Zsh 或 Fish)。 自定义安装版本和目录: ```bash JMV_VERSION=v0.1.0 JMV_INSTALL_DIR="$HOME/bin" sh install.sh fishep/okm ``` 跳过 Shell 配置文件修改: ```bash JMV_NO_MODIFY_PROFILE=1 sh install.sh fishep/okm ``` ### 手动安装 从 [v0.1.0 发行版](https://gitee.com/fishep/okm/releases/tag/v0.1.0) 下载对应平台的压缩包,然后手动安装: ```bash tar -xzf jmv_linux_amd64.tar.gz mkdir -p "$HOME/.local/bin" mv jmv "$HOME/.local/bin/jmv" chmod +x "$HOME/.local/bin/jmv" ``` ### 从源码编译 需要 Go 1.22 或更高版本: ```bash git clone https://gitee.com/fishep/okm.git cd okm go install ./cmd/jmv ``` 确保 Go 的 bin 目录在 `PATH` 中: ```bash export PATH="$(go env GOPATH)/bin:$PATH" ``` ### Shell 环境配置 `jmv` 使用 `$JMV_HOME` 存储已安装的 Java 运行时,使用 `$JMV_HOME/shims` 暴露 Java 命令。 **Bash / Zsh:** ```bash export JMV_HOME="$HOME/.jmv" export JMV_MIRROR="https://mirrors.tuna.tsinghua.edu.cn/Adoptium" export PATH="$HOME/.local/bin:$JMV_HOME/shims:$PATH" rm -rf "$JMV_HOME/sessions" ``` **Fish:** ```fish set -gx JMV_HOME "$HOME/.jmv" set -gx JMV_MIRROR "https://mirrors.tuna.tsinghua.edu.cn/Adoptium" fish_add_path "$HOME/.local/bin" fish_add_path "$JMV_HOME/shims" rm -rf "$JMV_HOME/sessions" ``` 安装完成后,运行以下命令验证: ```bash jmv list ``` ## 使用方法 ### 命令列表 | 命令 | 别名 | 说明 | |------|------|------| | `jmv list` | `ls` | 列出可用的 Java 版本 | | `jmv install <版本号>` | `i` | 安装指定主版本号的 JDK | | `jmv uninstall <版本号>` | `rm` | 卸载指定版本 | | `jmv use <版本号>` | `u` | 在当前会话中切换版本 | | `jmv default <版本号>` | `d` | 设置持久默认版本 | | `jmv current` | `c` | 显示当前激活的版本 | | `jmv version` | `v` | 显示 jmv 版本信息 | ### 选项 - `-r, --runtime [jdk|jre]` — 指定运行时类型,默认为 `jdk` ### 使用示例 ```bash # 列出所有可用版本 jmv list # 安装 JDK 17 jmv install 17 # 安装 JRE 8 jmv install -r jre 8 # 设置默认版本为 JDK 17(所有新终端生效) jmv default 17 # 仅在当前会话切换到 JDK 21 jmv use 21 # 查看当前使用的版本 jmv current # 卸载 JDK 11 jmv uninstall 11 ``` ### `use` 与 `default` 的区别 - `jmv default <版本号>` — 设置持久默认版本,所有新打开的终端会话都会使用该版本 - `jmv use <版本号>` — 仅在当前终端会话中切换版本,新开终端仍使用之前的默认版本 ## 环境变量 | 环境变量 | 默认值 | 说明 | |----------|--------|------| | `JMV_HOME` | `~/.jmv` | jmv 主目录,存储安装的运行时和配置 | | `JMV_MIRROR` | `https://mirrors.tuna.tsinghua.edu.cn/Adoptium` | JDK/JRE 下载镜像源 | ## 目录结构 ``` ~/.jmv/ ├── downloads/ # 临时下载目录 ├── jdk/ # JDK 安装目录 │ ├── 17/ │ └── 11/ ├── jre/ # JRE 安装目录 ├── shims/ # Shim 脚本目录(需加入 PATH) ├── current.json # 当前默认版本 └── sessions/ # 会话临时文件(自动清理) ``` ## 开发 ```bash go build ./cmd/jmv # 构建 go test ./... # 测试 go run ./cmd/jmv list # 本地运行 gofmt -w cmd internal # 格式化 sh -n install.sh # 校验安装脚本 ``` ## 许可证 [MIT License](LICENSE)