sdkvm 1.0.2 → 1.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.en.md +153 -122
- package/README.md +154 -123
- package/dist/index.js +385 -89
- package/package.json +3 -2
package/README.md
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
|
|
13
13
|
中文 | [English](./README.en.md)
|
|
14
14
|
|
|
15
|
-
管理 **Java JDK**、**Go 工具链**、**Flutter SDK
|
|
15
|
+
管理 **Java JDK**、**Go 工具链**、**Flutter SDK**、**Node.js 运行时**与 **Apache Maven**。
|
|
16
16
|
|
|
17
17
|
</div>
|
|
18
18
|
|
|
@@ -38,27 +38,28 @@
|
|
|
38
38
|
|
|
39
39
|
`sdkvm` 用 Node.js 编写,负责多种语言 SDK 的安装、切换和卸载。
|
|
40
40
|
|
|
41
|
-
| SDK
|
|
42
|
-
|
|
43
|
-
| Java
|
|
44
|
-
| Go
|
|
45
|
-
| Flutter | 官方发布清单
|
|
46
|
-
| Node.js | [nodejs.org/dist](https://nodejs.org/dist)
|
|
41
|
+
| SDK | 来源 | 说明 |
|
|
42
|
+
| ------- | ----------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------- |
|
|
43
|
+
| Java | [Temurin](https://adoptium.net/)、[Zulu](https://www.azul.com/downloads/)、[Corretto](https://aws.amazon.com/corretto/) | `lts` 当前为 8 / 11 / 17 / 21 / 25 |
|
|
44
|
+
| Go | [go.dev](https://go.dev/dl/) | 全历史稳定版 |
|
|
45
|
+
| Flutter | 官方发布清单 | stable / beta;macOS 双架构,Linux / Windows 仅 x64 |
|
|
46
|
+
| Node.js | [nodejs.org/dist](https://nodejs.org/dist) | `lts`(当前 24 Krypton)/ `latest` / 按 major 线;npm 随版本切换 |
|
|
47
|
+
| Maven | [Maven Central](https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/) | `3` / `3.9` / `latest` 取稳定版;预发布只能精确安装 |
|
|
47
48
|
|
|
48
49
|
行为约定:
|
|
49
50
|
|
|
50
|
-
- 各 SDK 目录隔离,`JAVA_HOME`、`GO_HOME`、`FLUTTER_HOME`、`NODE_HOME` 互不覆盖。
|
|
51
|
+
- 各 SDK 目录隔离,`JAVA_HOME`、`GO_HOME`、`FLUTTER_HOME`、`NODE_HOME`、`MAVEN_HOME` 互不覆盖。
|
|
51
52
|
- `use` 只改一个符号链接(Windows 为 junction),不搬移已安装的文件。
|
|
52
|
-
- 下载地址由官方 API 解析。Go、Flutter、Node.js 强制校验 SHA-256;Java 各源尽力校验。
|
|
53
|
-
- Temurin、Go、Flutter、Node.js 可配置镜像。校验和仍取自官方清单。
|
|
53
|
+
- 下载地址由官方 API 解析。Go、Flutter、Node.js 强制校验 SHA-256;Maven 强制校验官方 SHA-512;Java 各源尽力校验。
|
|
54
|
+
- Temurin、Go、Flutter、Node.js、Maven 可配置镜像。校验和仍取自官方清单。
|
|
54
55
|
- 新增语言只需实现一个厂商模块,见[开发](#开发)。
|
|
55
56
|
|
|
56
57
|
## 系统要求
|
|
57
58
|
|
|
58
|
-
| 依赖
|
|
59
|
-
|
|
60
|
-
| Node.js
|
|
61
|
-
| 操作系统 | —
|
|
59
|
+
| 依赖 | 版本 | 说明 |
|
|
60
|
+
| -------- | -------- | --------------------------------------------------------------------------------- |
|
|
61
|
+
| Node.js | >= 18.15 | npm 安装需要本机 Node。脚本安装自带隔离运行时,不要求预先安装 |
|
|
62
|
+
| 操作系统 | — | macOS(Apple Silicon / Intel)、主流 Linux、Windows 10+ |
|
|
62
63
|
| 解压工具 | 系统自带 | macOS / Linux 用 `tar`;Windows 用 bsdtar,缺失时回退 PowerShell `Expand-Archive` |
|
|
63
64
|
|
|
64
65
|
平台限制:
|
|
@@ -69,22 +70,11 @@
|
|
|
69
70
|
|
|
70
71
|
## 安装
|
|
71
72
|
|
|
72
|
-
|
|
73
|
+
**推荐使用安装脚本**:无需本机预装 Node.js,CLI 自带隔离运行时,数据与入口都在 `SDKVM_HOME`(默认 `~/.sdkvm`)下,升级用 `sdkvm upgrade` 即可。
|
|
73
74
|
|
|
74
|
-
|
|
75
|
+
### 安装脚本(推荐)
|
|
75
76
|
|
|
76
|
-
|
|
77
|
-
npm install -g sdkvm
|
|
78
|
-
pnpm add -g sdkvm
|
|
79
|
-
yarn global add sdkvm
|
|
80
|
-
bun add -g sdkvm
|
|
81
|
-
```
|
|
82
|
-
|
|
83
|
-
装好后 CLI 使用 `PATH` 上的 `node`。若之后切到 18.15 以前的 Node,CLI 会无法启动,切回较新版本即可。
|
|
84
|
-
|
|
85
|
-
### 安装脚本
|
|
86
|
-
|
|
87
|
-
不要求本机已经安装 Node.js。需要仓库已有带 `sdkvm.tgz` 与 `SHA256SUMS` 的 GitHub Release(打 `v*` tag 后由 CI 上传)。
|
|
77
|
+
需要仓库已有带 `sdkvm.tgz` 与 `SHA256SUMS` 的 [GitHub Release](https://github.com/QInJ1995/sdkvm/releases)(打 `v*` tag 后由 CI 上传)。
|
|
88
78
|
|
|
89
79
|
macOS / Linux:
|
|
90
80
|
|
|
@@ -100,37 +90,55 @@ irm https://raw.githubusercontent.com/QInJ1995/sdkvm/main/install.ps1 | iex
|
|
|
100
90
|
|
|
101
91
|
脚本会:
|
|
102
92
|
|
|
103
|
-
1. 下载 Node.js 22.20.0 到
|
|
104
|
-
2. 从 GitHub Release 下载 `sdkvm.tgz`,校验 SHA-256 后解压到
|
|
105
|
-
3. 写入
|
|
93
|
+
1. 下载 Node.js 22.20.0 到 `$SDKVM_HOME/runtime`(仅启动 CLI,`sdkvm node use` 不会改到它)。
|
|
94
|
+
2. 从 GitHub Release 下载 `sdkvm.tgz`,校验 SHA-256 后解压到 `$SDKVM_HOME/cli`。
|
|
95
|
+
3. 写入 `$SDKVM_HOME/bin/sdkvm`(Windows 为 `%SDKVM_HOME%\bin\sdkvm.cmd`),并把该目录写入 shell 配置 / 用户 PATH(zsh→`~/.zshrc`,bash→`~/.bash_profile` 或 `~/.bashrc`)。
|
|
106
96
|
|
|
107
|
-
|
|
97
|
+
装完后重开终端,或 `source` 对应 rc,再验证:
|
|
98
|
+
|
|
99
|
+
```console
|
|
100
|
+
$ sdkvm version
|
|
101
|
+
1.0.4
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
自定义数据根时,**必须在安装命令的环境里带上** `SDKVM_HOME`(`curl | sh` 不会读取 `~/.zshrc`):
|
|
105
|
+
|
|
106
|
+
```sh
|
|
107
|
+
SDKVM_HOME=/Volumes/Develop/sdkvm \
|
|
108
|
+
curl -fsSL https://raw.githubusercontent.com/QInJ1995/sdkvm/main/install.sh | sh
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
国内可换下载前缀:
|
|
108
112
|
|
|
109
113
|
```sh
|
|
110
114
|
SDKVM_NODE_DIST=https://npmmirror.com/mirrors/node \
|
|
111
115
|
SDKVM_RELEASE_BASE=https://github.com/QInJ1995/sdkvm/releases \
|
|
112
|
-
|
|
116
|
+
curl -fsSL https://raw.githubusercontent.com/QInJ1995/sdkvm/main/install.sh | sh
|
|
113
117
|
```
|
|
114
118
|
|
|
115
|
-
|
|
119
|
+
### npm / pnpm / yarn / bun(备选)
|
|
116
120
|
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
121
|
+
适合本机已有 Node.js >= 18.15、且希望用包管理器统一管理全局工具的场景。CLI 依赖 `PATH` 上的 `node`;若之后切到 18.15 以前的 Node,CLI 可能无法启动。
|
|
122
|
+
|
|
123
|
+
```sh
|
|
124
|
+
npm install -g sdkvm
|
|
125
|
+
pnpm add -g sdkvm
|
|
126
|
+
yarn global add sdkvm
|
|
127
|
+
bun add -g sdkvm
|
|
120
128
|
```
|
|
121
129
|
|
|
122
130
|
## 升级
|
|
123
131
|
|
|
124
|
-
| 安装方式
|
|
125
|
-
|
|
126
|
-
|
|
|
127
|
-
|
|
|
132
|
+
| 安装方式 | 命令 | 影响范围 |
|
|
133
|
+
| ------------ | --------------------- | --------------------------------------------------------- |
|
|
134
|
+
| 脚本(推荐) | `sdkvm upgrade` | 只替换 `$SDKVM_HOME/cli`。runtime 与已安装的 SDK 保持不变 |
|
|
135
|
+
| npm 等 | `npm update -g sdkvm` | 只更新 CLI。pnpm / yarn / bun 用各自的全局更新命令 |
|
|
128
136
|
|
|
129
|
-
|
|
137
|
+
数据目录与 CLI 升级无关。脚本安装也可以重新执行安装脚本。
|
|
130
138
|
|
|
131
139
|
## 快速开始
|
|
132
140
|
|
|
133
|
-
Java 可用裸命令(与 `sdkvm java` 等价);Go / Flutter / Node 用子命令。
|
|
141
|
+
Java 可用裸命令(与 `sdkvm java` 等价);Go / Flutter / Node / Maven 用子命令。
|
|
134
142
|
|
|
135
143
|
```sh
|
|
136
144
|
# 可选:国内加速(按 SDK 类型分别设置,互不影响)
|
|
@@ -138,6 +146,7 @@ sdkvm mirror use nju # Java Temurin
|
|
|
138
146
|
sdkvm go mirror use nju
|
|
139
147
|
sdkvm flutter mirror use nju
|
|
140
148
|
sdkvm node mirror use nju
|
|
149
|
+
sdkvm maven mirror use aliyun
|
|
141
150
|
sdkvm nrm use taobao # 仅影响 npm install,与上面的 mirror 无关
|
|
142
151
|
|
|
143
152
|
# Java
|
|
@@ -160,6 +169,11 @@ sdkvm node install lts
|
|
|
160
169
|
sdkvm node use 24
|
|
161
170
|
node --version
|
|
162
171
|
|
|
172
|
+
# Maven(需要已有 JAVA_HOME)
|
|
173
|
+
sdkvm maven install 3.9
|
|
174
|
+
sdkvm maven use 3.9
|
|
175
|
+
mvn -version
|
|
176
|
+
|
|
163
177
|
# 查看与卸载
|
|
164
178
|
sdkvm current
|
|
165
179
|
sdkvm java install 21 --vendor zulu
|
|
@@ -175,22 +189,22 @@ sdkvm uninstall zulu-21
|
|
|
175
189
|
|
|
176
190
|
## 命令参考
|
|
177
191
|
|
|
178
|
-
Java 使用裸命令(`sdkvm install`)或 `sdkvm java`,两者等价。Go、Flutter、Node.js 分别使用 `sdkvm go`、`sdkvm flutter`、`sdkvm node`。
|
|
192
|
+
Java 使用裸命令(`sdkvm install`)或 `sdkvm java`,两者等价。Go、Flutter、Node.js、Maven 分别使用 `sdkvm go`、`sdkvm flutter`、`sdkvm node`、`sdkvm maven`。
|
|
179
193
|
|
|
180
194
|
### 命令速查
|
|
181
195
|
|
|
182
|
-
| 命令
|
|
183
|
-
|
|
184
|
-
| `sdkvm install <version>`
|
|
185
|
-
| `sdkvm use <version>`
|
|
186
|
-
| `sdkvm ls` / `sdkvm ls -r`
|
|
187
|
-
| `sdkvm current`
|
|
188
|
-
| `sdkvm uninstall <version>`
|
|
196
|
+
| 命令 | 作用 |
|
|
197
|
+
| ------------------------------------------------- | -------------------------------------------------- |
|
|
198
|
+
| `sdkvm install <version>` | 安装 Java(等于 `sdkvm java install`) |
|
|
199
|
+
| `sdkvm use <version>` | 切换当前 Java |
|
|
200
|
+
| `sdkvm ls` / `sdkvm ls -r` | 列出已安装版本 / 可安装版本线 |
|
|
201
|
+
| `sdkvm current` | 显示全部 SDK 的当前版本 |
|
|
202
|
+
| `sdkvm uninstall <version>` | 卸载一个版本 |
|
|
189
203
|
| `sdkvm mirror ls\|use\|current\|show\|set\|unset` | 管理 SDK 下载镜像站 / URL(安装包,不是 npm 包源) |
|
|
190
|
-
| `sdkvm nrm ls\|use\|current\|add\|del\|test`
|
|
191
|
-
| `sdkvm java\|go\|flutter\|node …`
|
|
192
|
-
| `sdkvm version`
|
|
193
|
-
| `sdkvm upgrade`
|
|
204
|
+
| `sdkvm nrm ls\|use\|current\|add\|del\|test` | 管理用户级 npm registry(类似 nrm) |
|
|
205
|
+
| `sdkvm java\|go\|flutter\|node\|maven …` | 各 SDK 的完整命令组 |
|
|
206
|
+
| `sdkvm version` | 打印 CLI 版本(同 `sdkvm --version`) |
|
|
207
|
+
| `sdkvm upgrade` | 升级 CLI。见[升级](#升级) |
|
|
194
208
|
|
|
195
209
|
版本写法:
|
|
196
210
|
|
|
@@ -199,6 +213,7 @@ sdkvm java install lts | 21 | 21.0.5 | 21.0.5+11 | zulu-21
|
|
|
199
213
|
sdkvm go install latest | 1.24 | 1.24.5 | golang-1.24
|
|
200
214
|
sdkvm flutter install latest | 3.47 | 3.47.5 | 3.49.0-0.1.pre | flutter-3.47
|
|
201
215
|
sdkvm node install lts | latest | 22 | 22.20.0 | nodejs-22.20.0
|
|
216
|
+
sdkvm maven install latest | 3 | 3.9 | 3.9.9 | 4.0.0-rc-4 | maven-3.9
|
|
202
217
|
```
|
|
203
218
|
|
|
204
219
|
### `sdkvm install <version>`
|
|
@@ -214,16 +229,16 @@ sdkvm installed Temurin 21.0.12.1 → ~/.sdkvm/jdks/temurin-21.0.12.1
|
|
|
214
229
|
sdkvm switch to it: sdkvm use 21
|
|
215
230
|
```
|
|
216
231
|
|
|
217
|
-
| 选项
|
|
218
|
-
|
|
219
|
-
| `--vendor <id>` | Java:`temurin`(默认)/ `zulu` / `corretto`。Go 为 `golang`,Flutter 为 `flutter`,Node.js 为 `nodejs` |
|
|
220
|
-
| `--force`
|
|
232
|
+
| 选项 | 说明 |
|
|
233
|
+
| --------------- | ------------------------------------------------------------------------------------------------------- |
|
|
234
|
+
| `--vendor <id>` | Java:`temurin`(默认)/ `zulu` / `corretto`。Go 为 `golang`,Flutter 为 `flutter`,Node.js 为 `nodejs`,Maven 为 `maven` |
|
|
235
|
+
| `--force` | 已安装时删除并重装。默认跳过已安装版本 |
|
|
221
236
|
|
|
222
237
|
校验失败或解压异常时,半成品目录和缓存会被清掉。下载超时是 60 秒无数据,不是总时长上限。
|
|
223
238
|
|
|
224
239
|
### `sdkvm use <version>`
|
|
225
240
|
|
|
226
|
-
在已安装版本中匹配,并更新对应的 `current-*` 链接与 `JAVA_HOME` / `GO_HOME` / `FLUTTER_HOME` / `NODE_HOME` / `PATH`。
|
|
241
|
+
在已安装版本中匹配,并更新对应的 `current-*` 链接与 `JAVA_HOME` / `GO_HOME` / `FLUTTER_HOME` / `NODE_HOME` / `MAVEN_HOME` / `PATH`。
|
|
227
242
|
|
|
228
243
|
```sh
|
|
229
244
|
sdkvm use 21
|
|
@@ -231,9 +246,10 @@ sdkvm use temurin-21.0.5+11
|
|
|
231
246
|
sdkvm go use 1.24.5
|
|
232
247
|
sdkvm flutter use 3.47.5
|
|
233
248
|
sdkvm node use 22.20.0
|
|
249
|
+
sdkvm maven use 3.9
|
|
234
250
|
```
|
|
235
251
|
|
|
236
|
-
macOS / Linux 上,首次 `use` 会向 shell 配置追加初始化块,重开终端或 `source ~/.zshrc` 后生效。之后的切换只改链接。IDE
|
|
252
|
+
macOS / Linux 上,首次 `use` 会向 shell 配置追加初始化块,重开终端或 `source ~/.zshrc` 后生效。之后的切换只改链接。IDE 需要重启才会读到新的环境变量。Maven 需要 JDK:没有 `JAVA_HOME` 时会提示先 `sdkvm java use`。详见[切换机制](#切换机制)。
|
|
237
253
|
|
|
238
254
|
### `sdkvm ls`
|
|
239
255
|
|
|
@@ -273,6 +289,8 @@ flutter: flutter-3.47.5
|
|
|
273
289
|
FLUTTER_HOME → ~/.sdkvm/flutters/flutter-3.47.5
|
|
274
290
|
node: nodejs-22.20.0
|
|
275
291
|
NODE_HOME → ~/.sdkvm/nodes/nodejs-22.20.0
|
|
292
|
+
maven: maven-3.9.9
|
|
293
|
+
MAVEN_HOME → ~/.sdkvm/mavens/maven-3.9.9
|
|
276
294
|
```
|
|
277
295
|
|
|
278
296
|
### `sdkvm uninstall <version>`
|
|
@@ -281,7 +299,7 @@ node: nodejs-22.20.0
|
|
|
281
299
|
|
|
282
300
|
### `sdkvm mirror`
|
|
283
301
|
|
|
284
|
-
按 SDK 类型管理**安装包下载镜像**(不是 npm 包源)。Java:`sdkvm mirror`;其余:`sdkvm go|flutter|node mirror`。作用域互不影响。
|
|
302
|
+
按 SDK 类型管理**安装包下载镜像**(不是 npm 包源)。Java:`sdkvm mirror`;其余:`sdkvm go|flutter|node|maven mirror`。作用域互不影响。
|
|
285
303
|
|
|
286
304
|
```sh
|
|
287
305
|
sdkvm mirror ls
|
|
@@ -290,11 +308,11 @@ sdkvm go mirror use aliyun
|
|
|
290
308
|
sdkvm node mirror use official # 恢复该类型官方源
|
|
291
309
|
```
|
|
292
310
|
|
|
293
|
-
| 动作
|
|
294
|
-
|
|
295
|
-
| `ls` / `current` / `show`
|
|
296
|
-
| `use <site>`
|
|
297
|
-
| `set [vendor] <url>` / `unset` | 手填或清除 URL
|
|
311
|
+
| 动作 | 说明 |
|
|
312
|
+
| ------------------------------ | ------------------------------------------------------------------- |
|
|
313
|
+
| `ls` / `current` / `show` | 查看本类型可用站与当前配置 |
|
|
314
|
+
| `use <site>` | 一键切换内置站(`nju` / `tuna` / `aliyun` / `huawei` / `official`) |
|
|
315
|
+
| `set [vendor] <url>` / `unset` | 手填或清除 URL |
|
|
298
316
|
|
|
299
317
|
站点覆盖与手填示例见[镜像与 npm 源](#镜像与-npm-源)。
|
|
300
318
|
|
|
@@ -317,20 +335,21 @@ sdkvm nrm test
|
|
|
317
335
|
|
|
318
336
|
`install`、`use`、`uninstall` 共用下表。未列出的组合会被拒绝并给出改写提示。
|
|
319
337
|
|
|
320
|
-
| 语法
|
|
321
|
-
|
|
322
|
-
| `<major>`
|
|
323
|
-
| `<major.minor>`
|
|
324
|
-
| `lts`
|
|
325
|
-
| `latest`
|
|
326
|
-
| `<full-version>` | 精确版本或前缀
|
|
327
|
-
| `<vendor>-…`
|
|
338
|
+
| 语法 | Java | Go | Flutter | Node.js | Maven | 示例 |
|
|
339
|
+
| ---------------- | ---------------- | ------------------- | ------------------------------ | ------------------------------ | ------------------------------ | ----------------------------------------------------------------- |
|
|
340
|
+
| `<major>` | 该大版本最新补丁 | — | — | 该 major 最新 | 该 major 最新稳定版 | `21`、`22`、`3` |
|
|
341
|
+
| `<major.minor>` | — | 该 minor 线最新补丁 | stable 通道该 minor 线最新补丁 | — | 该 minor 线最新稳定版 | `1.24`、`3.47`、`3.9` |
|
|
342
|
+
| `lts` | 最新 LTS 大版本 | — | — | 最新 LTS 线(当前 24 Krypton) | — | `lts` |
|
|
343
|
+
| `latest` | — | 最新稳定版 | stable 最新,不含 beta | 最新 Current | 最高稳定版,不含预发布 | `latest` |
|
|
344
|
+
| `<full-version>` | 精确版本或前缀 | 精确版本 | 精确版本,可含 prerelease | 精确版本 | 精确版本,可含预发布 | `21.0.5+11`、`1.24.5`、`3.49.0-0.1.pre`、`22.20.0`、`4.0.0-rc-4` |
|
|
345
|
+
| `<vendor>-…` | 限定发行版 | 同左 | 同左 | 同左 | 同左 | `zulu-21`、`golang-1.24`、`nodejs-22.20.0`、`maven-3.9.9` |
|
|
328
346
|
|
|
329
347
|
匹配规则:
|
|
330
348
|
|
|
331
|
-
- `21`、`1.24`、`3.47`、`22` 匹配该线已安装或可安装的最新补丁。
|
|
332
|
-
- Java 的 `21.0.5` 做前缀匹配,可以命中 `21.0.5+11`。Go、Flutter、Node.js 的精确版本按全串匹配。
|
|
349
|
+
- `21`、`1.24`、`3.47`、`22`、`3`、`3.9` 匹配该线已安装或可安装的最新补丁。
|
|
350
|
+
- Java 的 `21.0.5` 做前缀匹配,可以命中 `21.0.5+11`。Go、Flutter、Node.js、Maven 的精确版本按全串匹配。
|
|
333
351
|
- Flutter 的 `latest` 与 `3.47` 只解析 stable。安装 beta 需要完整 prerelease,例如 `3.49.0-0.1.pre`。
|
|
352
|
+
- Maven 只收录 3.0 及以上的稳定版 `x.y.z`。`latest`、`3`、`3.9` 不含预发布;安装 `4.0.0-rc-4` 这类版本必须写完整串。Maven 没有 `lts`。
|
|
334
353
|
- Java 的 `lts` 与 Adoptium 列表对齐,当前为 8 / 11 / 17 / 21 / 25。Node.js 的 `lts` 取官方 `index.json` 里最新带 LTS 代号的条目。
|
|
335
354
|
- Node.js 不接受 `22.20` 这种两段式,应写成 `22` 或 `22.20.0`。
|
|
336
355
|
- 省略厂商前缀时使用默认发行版。只有 Java 可以配置默认厂商,见[配置文件](#配置文件)。
|
|
@@ -347,10 +366,12 @@ sdkvm nrm test
|
|
|
347
366
|
├── gos/ # Go:golang-1.24.5
|
|
348
367
|
├── flutters/ # Flutter:flutter-3.47.5
|
|
349
368
|
├── nodes/ # Node.js:nodejs-22.20.0
|
|
369
|
+
├── mavens/ # Maven:maven-3.9.9
|
|
350
370
|
├── current-java # JAVA_HOME 链接(Windows 为 junction)
|
|
351
371
|
├── current-go
|
|
352
372
|
├── current-flutter
|
|
353
373
|
├── current-node
|
|
374
|
+
├── current-maven
|
|
354
375
|
├── runtime/ # 脚本安装的 CLI 运行时,与 current-node 隔离
|
|
355
376
|
├── cli/ # 脚本安装的 CLI 包
|
|
356
377
|
├── bin/ # 脚本安装的入口 sdkvm(需加入 PATH)
|
|
@@ -359,11 +380,11 @@ sdkvm nrm test
|
|
|
359
380
|
└── tmp/ # 解压临时目录,同样会删除
|
|
360
381
|
```
|
|
361
382
|
|
|
362
|
-
解压后的大致体积:Java 约 300 MB,Go 约 250 MB,Node.js 约 100 MB(含捆绑 npm),Flutter 数 GB(压缩包约 1–2.2 GB)。
|
|
383
|
+
解压后的大致体积:Java 约 300 MB,Go 约 250 MB,Node.js 约 100 MB(含捆绑 npm),Maven 约 10 MB,Flutter 数 GB(压缩包约 1–2.2 GB)。
|
|
363
384
|
|
|
364
385
|
### 切换机制
|
|
365
386
|
|
|
366
|
-
macOS / Linux 上,`current-*` 是指向当前版本目录的符号链接。首次 `use` 会向 shell 配置追加带标记的块:zsh 写入 `~/.zshrc`,bash 写入 `~/.bash_profile` 或 `~/.bashrc
|
|
387
|
+
macOS / Linux 上,`current-*` 是指向当前版本目录的符号链接。首次 `use` 会向 shell 配置追加带标记的块:zsh 写入 `~/.zshrc`,bash 写入 `~/.bash_profile` 或 `~/.bashrc`。五种 SDK 各一块。
|
|
367
388
|
|
|
368
389
|
```sh
|
|
369
390
|
# >>> sdkvm java init >>>
|
|
@@ -385,11 +406,16 @@ case ":$PATH:" in *":$FLUTTER_HOME/bin:"*) ;; *) export PATH="$FLUTTER_HOME/bin:
|
|
|
385
406
|
export NODE_HOME="$HOME/.sdkvm/current-node"
|
|
386
407
|
case ":$PATH:" in *":$NODE_HOME/bin:"*) ;; *) export PATH="$NODE_HOME/bin:$PATH";; esac
|
|
387
408
|
# <<< sdkvm node init <<<
|
|
409
|
+
|
|
410
|
+
# >>> sdkvm maven init >>>
|
|
411
|
+
export MAVEN_HOME="$HOME/.sdkvm/current-maven"
|
|
412
|
+
case ":$PATH:" in *":$MAVEN_HOME/bin:"*) ;; *) export PATH="$MAVEN_HOME/bin:$PATH";; esac
|
|
413
|
+
# <<< sdkvm maven init <<<
|
|
388
414
|
```
|
|
389
415
|
|
|
390
416
|
环境变量指向链接。之后的 `use` 只改链接,新终端会读到新值。
|
|
391
417
|
|
|
392
|
-
Windows
|
|
418
|
+
Windows 上,五个 `current-*` 都是 junction。`use` 把用户级环境变量写成 `REG_EXPAND_SZ`,保留 `%VAR%` 引用,避免 `setx` 的 1024 字符截断。PATH 追加 `%JAVA_HOME%\bin`、`%GO_HOME%\bin`、`%FLUTTER_HOME%\bin`、`%MAVEN_HOME%\bin`。Node.js 的 Windows 归档没有 `bin/`,PATH 项是 `%NODE_HOME%` 本身。需要重开终端或重启 IDE。
|
|
393
419
|
|
|
394
420
|
## 配置
|
|
395
421
|
|
|
@@ -405,7 +431,8 @@ Windows 上,四个 `current-*` 都是 junction。`use` 把用户级环境变
|
|
|
405
431
|
"temurin": "https://mirrors.nju.edu.cn/adoptium",
|
|
406
432
|
"golang": "https://golang.google.cn/dl",
|
|
407
433
|
"flutter": "https://mirror.nju.edu.cn/flutter/flutter_infra_release",
|
|
408
|
-
"nodejs": "https://mirror.nju.edu.cn/nodejs-release"
|
|
434
|
+
"nodejs": "https://mirror.nju.edu.cn/nodejs-release",
|
|
435
|
+
"maven": "https://maven.aliyun.com/repository/central"
|
|
409
436
|
},
|
|
410
437
|
"npmRegistries": {
|
|
411
438
|
"myprivate": "http://xxx/registry/"
|
|
@@ -413,23 +440,23 @@ Windows 上,四个 `current-*` 都是 junction。`use` 把用户级环境变
|
|
|
413
440
|
}
|
|
414
441
|
```
|
|
415
442
|
|
|
416
|
-
| 字段
|
|
417
|
-
|
|
418
|
-
| `version`
|
|
419
|
-
| `defaultVendor` | Java 省略厂商前缀时的发行版
|
|
420
|
-
| `mirror`
|
|
421
|
-
| `npmRegistries` | `sdkvm nrm add` 写入的自定义 npm 源
|
|
443
|
+
| 字段 | 说明 | 默认值 |
|
|
444
|
+
| --------------- | ------------------------------------------ | ----------- |
|
|
445
|
+
| `version` | schema 版本 | `1` |
|
|
446
|
+
| `defaultVendor` | Java 省略厂商前缀时的发行版 | `"temurin"` |
|
|
447
|
+
| `mirror` | 厂商 id 到镜像根 URL。id 在全部 SDK 中唯一 | `{}` |
|
|
448
|
+
| `npmRegistries` | `sdkvm nrm add` 写入的自定义 npm 源 | `{}` |
|
|
422
449
|
|
|
423
450
|
### 环境变量
|
|
424
451
|
|
|
425
|
-
| 变量
|
|
426
|
-
|
|
427
|
-
| `SDKVM_HOME`
|
|
428
|
-
| `SDKVM_MIRROR`
|
|
429
|
-
| `SDKVM_QUIET`
|
|
430
|
-
| `SDKVM_NODE_DIST`
|
|
452
|
+
| 变量 | 说明 |
|
|
453
|
+
| -------------------- | ------------------------------------------------------- |
|
|
454
|
+
| `SDKVM_HOME` | 数据根目录,默认 `~/.sdkvm` |
|
|
455
|
+
| `SDKVM_MIRROR` | 临时镜像,优先级高于配置文件,不写入配置 |
|
|
456
|
+
| `SDKVM_QUIET` | 非空时抑制 info 与 warn |
|
|
457
|
+
| `SDKVM_NODE_DIST` | 安装脚本使用的 Node 发行根 URL |
|
|
431
458
|
| `SDKVM_RELEASE_BASE` | 安装脚本与 `sdkvm upgrade` 使用的 GitHub Release 根 URL |
|
|
432
|
-
| `SDKVM_RUNTIME_NODE` | 安装脚本内置的 Node 版本,默认 `22.20.0`
|
|
459
|
+
| `SDKVM_RUNTIME_NODE` | 安装脚本内置的 Node 版本,默认 `22.20.0` |
|
|
433
460
|
|
|
434
461
|
镜像优先级:`SDKVM_MIRROR` > `config.mirror[<vendor>]` > 官方源。详见[镜像与 npm 源](#镜像与-npm-源)。
|
|
435
462
|
|
|
@@ -437,11 +464,11 @@ Windows 上,四个 `current-*` 都是 junction。`use` 把用户级环境变
|
|
|
437
464
|
|
|
438
465
|
两套独立能力,不要混用:
|
|
439
466
|
|
|
440
|
-
|
|
|
441
|
-
|
|
442
|
-
| 改什么 | JDK / Go / Flutter / Node **安装包**下载地址 | **npm 包** registry |
|
|
443
|
-
| 影响
|
|
444
|
-
| 作用域 | 按 SDK 类型分别设置
|
|
467
|
+
| | `sdkvm mirror` | `sdkvm nrm` |
|
|
468
|
+
| ------ | -------------------------------------------- | ------------------- |
|
|
469
|
+
| 改什么 | JDK / Go / Flutter / Node / Maven **安装包**下载地址 | **npm 包** registry |
|
|
470
|
+
| 影响 | `sdkvm … install` | `npm install` |
|
|
471
|
+
| 作用域 | 按 SDK 类型分别设置 | 用户级全局 |
|
|
445
472
|
|
|
446
473
|
### SDK 安装包镜像
|
|
447
474
|
|
|
@@ -452,15 +479,16 @@ sdkvm mirror use nju
|
|
|
452
479
|
sdkvm go mirror use nju
|
|
453
480
|
sdkvm flutter mirror use nju
|
|
454
481
|
sdkvm node mirror use nju
|
|
482
|
+
sdkvm maven mirror use aliyun
|
|
455
483
|
```
|
|
456
484
|
|
|
457
|
-
| 站点
|
|
458
|
-
|
|
459
|
-
| `nju`
|
|
460
|
-
| `tuna`
|
|
461
|
-
| `aliyun`
|
|
462
|
-
| `huawei`
|
|
463
|
-
| `official` | 清空本类型
|
|
485
|
+
| 站点 | Java (temurin) | Go | Flutter | Node.js | Maven |
|
|
486
|
+
| ---------- | -------------- | ---------- | ---------- | --------------------- | ---------- |
|
|
487
|
+
| `nju` | ✓ | ✓ | ✓ | ✓ | — |
|
|
488
|
+
| `tuna` | ✓ | — | ✓ | —(归档不全,未收录) | — |
|
|
489
|
+
| `aliyun` | — | ✓ | — | ✓ | ✓ |
|
|
490
|
+
| `huawei` | — | — | — | ✓ | ✓ |
|
|
491
|
+
| `official` | 清空本类型 | 清空本类型 | 清空本类型 | 清空本类型 | 清空本类型 |
|
|
464
492
|
|
|
465
493
|
手填 URL 或临时覆盖:
|
|
466
494
|
|
|
@@ -469,15 +497,16 @@ sdkvm go mirror set golang https://golang.google.cn/dl
|
|
|
469
497
|
SDKVM_MIRROR=https://golang.google.cn/dl sdkvm go install 1.24
|
|
470
498
|
```
|
|
471
499
|
|
|
472
|
-
优先级:`SDKVM_MIRROR` > `config.mirror[<vendor>]` >
|
|
500
|
+
优先级:`SDKVM_MIRROR` > `config.mirror[<vendor>]` > 官方源。镜像只替换归档下载地址;版本元数据与校验和优先走官方 API。官方校验源不可达、且校验文件是归档旁路(Maven `.sha512`、Temurin `.json`)时,改拉镜像上的同一文件再核对。两边都拿不到,或哈希不一致,安装仍失败。
|
|
473
501
|
|
|
474
|
-
| 厂商
|
|
475
|
-
|
|
476
|
-
| Temurin
|
|
477
|
-
| Go
|
|
478
|
-
| Flutter
|
|
479
|
-
| Node.js
|
|
480
|
-
|
|
|
502
|
+
| 厂商 | 说明 |
|
|
503
|
+
| -------------- | ------------------------------------------------------------------------------------------------------------------------------- |
|
|
504
|
+
| Temurin | Adoptium 目录结构;已验证 [NJU](https://mirrors.nju.edu.cn/adoptium)、[TUNA](https://mirrors.tuna.tsinghua.edu.cn/Adoptium) |
|
|
505
|
+
| Go | 文件名拼在根 URL 后;如 `nju` / `aliyun` |
|
|
506
|
+
| Flutter | 桶前缀替换;已验证 [NJU](https://mirror.nju.edu.cn/flutter/flutter_infra_release)。不要用 `storage.flutter-io.cn`(无发布清单) |
|
|
507
|
+
| Node.js | 前缀替换;已验证 [NJU](https://mirror.nju.edu.cn/nodejs-release)。不要用 TUNA nodejs-release(缺归档) |
|
|
508
|
+
| Maven | Central 路径前缀替换;已验证 [阿里云 central](https://maven.aliyun.com/repository/central)、[华为云 maven](https://repo.huaweicloud.com/repository/maven)。校验用官方 `.sha512` |
|
|
509
|
+
| Zulu、Corretto | 官方 CDN 直发,暂不支持镜像 |
|
|
481
510
|
|
|
482
511
|
### npm registry
|
|
483
512
|
|
|
@@ -489,8 +518,8 @@ sdkvm nrm test # 测延迟
|
|
|
489
518
|
|
|
490
519
|
## 安全性
|
|
491
520
|
|
|
492
|
-
- 下载地址来自官方 API:Adoptium、Azul Metadata、Corretto、go.dev/dl、Flutter releases、nodejs.org/dist `index.json`。不抓取搜索页。
|
|
493
|
-
- 归档按块计算 SHA-256。Go、Flutter、Node.js(官方 `SHASUMS256.txt`)校验失败即中止。
|
|
521
|
+
- 下载地址来自官方 API:Adoptium、Azul Metadata、Corretto、go.dev/dl、Flutter releases、nodejs.org/dist `index.json`、Maven Central `maven-metadata.xml`。不抓取搜索页。
|
|
522
|
+
- 归档按块计算 SHA-256。Go、Flutter、Node.js(官方 `SHASUMS256.txt`)校验失败即中止。Maven 再对落盘文件计算 SHA-512,对照 `.sha512`(Central 不提供 `.sha256`)。校验源不可达时:官方下载警告并继续;走镜像时先试官方旁路,失败再试镜像上的同一文件。两边都拿不到,或哈希不一致,安装失败。
|
|
494
523
|
- 解压后检查单根目录和可执行文件,并且只解压到新的空目录。
|
|
495
524
|
- 安装与 `sdkvm upgrade` 持有 `~/.sdkvm/.lock`,避免并发写互相覆盖。
|
|
496
525
|
|
|
@@ -513,7 +542,8 @@ set -gx JAVA_HOME $HOME/.sdkvm/current-java
|
|
|
513
542
|
set -gx GO_HOME $HOME/.sdkvm/current-go
|
|
514
543
|
set -gx FLUTTER_HOME $HOME/.sdkvm/current-flutter
|
|
515
544
|
set -gx NODE_HOME $HOME/.sdkvm/current-node
|
|
516
|
-
|
|
545
|
+
set -gx MAVEN_HOME $HOME/.sdkvm/current-maven
|
|
546
|
+
fish_add_path $JAVA_HOME/bin $GO_HOME/bin $FLUTTER_HOME/bin $NODE_HOME/bin $MAVEN_HOME/bin
|
|
517
547
|
```
|
|
518
548
|
|
|
519
549
|
### Flutter 下载慢或中断
|
|
@@ -558,17 +588,18 @@ rm -rf ~/.sdkvm/bin ~/.sdkvm/cli ~/.sdkvm/runtime
|
|
|
558
588
|
|
|
559
589
|
Windows 对应删除 `%USERPROFILE%\.sdkvm\bin\sdkvm.cmd`,以及 `%USERPROFILE%\.sdkvm\cli` 与 `%USERPROFILE%\.sdkvm\runtime`,并从用户 PATH 移除 `%USERPROFILE%\.sdkvm\bin`。
|
|
560
590
|
|
|
561
|
-
确认不再需要已安装的 JDK、Go、Flutter、Node.js 之后,再删除数据目录:
|
|
591
|
+
确认不再需要已安装的 JDK、Go、Flutter、Node.js、Maven 之后,再删除数据目录:
|
|
562
592
|
|
|
563
593
|
```sh
|
|
564
594
|
rm -rf ~/.sdkvm
|
|
565
595
|
```
|
|
566
596
|
|
|
567
597
|
同时删除 shell 配置里:
|
|
598
|
+
|
|
568
599
|
- `# >>> sdkvm path >>>` … `# <<< sdkvm path <<<`
|
|
569
|
-
- 各 SDK 的 `>>> sdkvm java|go|flutter|node init >>>` … `<<< … <<<`
|
|
600
|
+
- 各 SDK 的 `>>> sdkvm java|go|flutter|node|maven init >>>` … `<<< … <<<`
|
|
570
601
|
|
|
571
|
-
Windows 还需要在系统设置中删除 `JAVA_HOME`、`GO_HOME`、`FLUTTER_HOME`、`NODE_HOME`,并从用户 PATH 移除 `%JAVA_HOME%\bin`、`%GO_HOME%\bin`、`%FLUTTER_HOME%\bin`、`%NODE_HOME
|
|
602
|
+
Windows 还需要在系统设置中删除 `JAVA_HOME`、`GO_HOME`、`FLUTTER_HOME`、`NODE_HOME`、`MAVEN_HOME`,并从用户 PATH 移除 `%JAVA_HOME%\bin`、`%GO_HOME%\bin`、`%FLUTTER_HOME%\bin`、`%NODE_HOME%`、`%MAVEN_HOME%\bin`。
|
|
572
603
|
|
|
573
604
|
## 开发
|
|
574
605
|
|
|
@@ -586,8 +617,8 @@ npm run build
|
|
|
586
617
|
src/
|
|
587
618
|
├── cli/ # install / use / ls / uninstall / mirror / nrm / upgrade
|
|
588
619
|
├── core/ # 版本解析、注册表、配置、文件锁
|
|
589
|
-
├── sdk/ # java / go / flutter / node 的目录、环境变量、版本语法
|
|
590
|
-
├── vendor/ # temurin / zulu / corretto / golang / flutter / nodejs 与镜像改写
|
|
620
|
+
├── sdk/ # java / go / flutter / node / maven 的目录、环境变量、版本语法
|
|
621
|
+
├── vendor/ # temurin / zulu / corretto / golang / flutter / nodejs / maven 与镜像改写
|
|
591
622
|
├── fs/ # 解压、目录归一化、链接
|
|
592
623
|
├── shell/ # rc 写入、Windows 注册表
|
|
593
624
|
├── net/ # fetch、流式下载、校验
|
|
@@ -598,4 +629,4 @@ src/
|
|
|
598
629
|
|
|
599
630
|
## 许可证
|
|
600
631
|
|
|
601
|
-
[MIT](./LICENSE) ©
|
|
632
|
+
[MIT](./LICENSE) © 秦佬湿
|