sdkvm 1.0.3 → 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 +123 -99
- package/README.md +124 -100
- package/dist/index.js +370 -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
|
平台限制:
|
|
@@ -97,7 +98,7 @@ irm https://raw.githubusercontent.com/QInJ1995/sdkvm/main/install.ps1 | iex
|
|
|
97
98
|
|
|
98
99
|
```console
|
|
99
100
|
$ sdkvm version
|
|
100
|
-
1.0.
|
|
101
|
+
1.0.4
|
|
101
102
|
```
|
|
102
103
|
|
|
103
104
|
自定义数据根时,**必须在安装命令的环境里带上** `SDKVM_HOME`(`curl | sh` 不会读取 `~/.zshrc`):
|
|
@@ -128,16 +129,16 @@ bun add -g sdkvm
|
|
|
128
129
|
|
|
129
130
|
## 升级
|
|
130
131
|
|
|
131
|
-
| 安装方式
|
|
132
|
-
|
|
133
|
-
| 脚本(推荐) | `sdkvm upgrade`
|
|
134
|
-
| npm 等
|
|
132
|
+
| 安装方式 | 命令 | 影响范围 |
|
|
133
|
+
| ------------ | --------------------- | --------------------------------------------------------- |
|
|
134
|
+
| 脚本(推荐) | `sdkvm upgrade` | 只替换 `$SDKVM_HOME/cli`。runtime 与已安装的 SDK 保持不变 |
|
|
135
|
+
| npm 等 | `npm update -g sdkvm` | 只更新 CLI。pnpm / yarn / bun 用各自的全局更新命令 |
|
|
135
136
|
|
|
136
137
|
数据目录与 CLI 升级无关。脚本安装也可以重新执行安装脚本。
|
|
137
138
|
|
|
138
139
|
## 快速开始
|
|
139
140
|
|
|
140
|
-
Java 可用裸命令(与 `sdkvm java` 等价);Go / Flutter / Node 用子命令。
|
|
141
|
+
Java 可用裸命令(与 `sdkvm java` 等价);Go / Flutter / Node / Maven 用子命令。
|
|
141
142
|
|
|
142
143
|
```sh
|
|
143
144
|
# 可选:国内加速(按 SDK 类型分别设置,互不影响)
|
|
@@ -145,6 +146,7 @@ sdkvm mirror use nju # Java Temurin
|
|
|
145
146
|
sdkvm go mirror use nju
|
|
146
147
|
sdkvm flutter mirror use nju
|
|
147
148
|
sdkvm node mirror use nju
|
|
149
|
+
sdkvm maven mirror use aliyun
|
|
148
150
|
sdkvm nrm use taobao # 仅影响 npm install,与上面的 mirror 无关
|
|
149
151
|
|
|
150
152
|
# Java
|
|
@@ -167,6 +169,11 @@ sdkvm node install lts
|
|
|
167
169
|
sdkvm node use 24
|
|
168
170
|
node --version
|
|
169
171
|
|
|
172
|
+
# Maven(需要已有 JAVA_HOME)
|
|
173
|
+
sdkvm maven install 3.9
|
|
174
|
+
sdkvm maven use 3.9
|
|
175
|
+
mvn -version
|
|
176
|
+
|
|
170
177
|
# 查看与卸载
|
|
171
178
|
sdkvm current
|
|
172
179
|
sdkvm java install 21 --vendor zulu
|
|
@@ -182,22 +189,22 @@ sdkvm uninstall zulu-21
|
|
|
182
189
|
|
|
183
190
|
## 命令参考
|
|
184
191
|
|
|
185
|
-
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`。
|
|
186
193
|
|
|
187
194
|
### 命令速查
|
|
188
195
|
|
|
189
|
-
| 命令
|
|
190
|
-
|
|
191
|
-
| `sdkvm install <version>`
|
|
192
|
-
| `sdkvm use <version>`
|
|
193
|
-
| `sdkvm ls` / `sdkvm ls -r`
|
|
194
|
-
| `sdkvm current`
|
|
195
|
-
| `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>` | 卸载一个版本 |
|
|
196
203
|
| `sdkvm mirror ls\|use\|current\|show\|set\|unset` | 管理 SDK 下载镜像站 / URL(安装包,不是 npm 包源) |
|
|
197
|
-
| `sdkvm nrm ls\|use\|current\|add\|del\|test`
|
|
198
|
-
| `sdkvm java\|go\|flutter\|node …`
|
|
199
|
-
| `sdkvm version`
|
|
200
|
-
| `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。见[升级](#升级) |
|
|
201
208
|
|
|
202
209
|
版本写法:
|
|
203
210
|
|
|
@@ -206,6 +213,7 @@ sdkvm java install lts | 21 | 21.0.5 | 21.0.5+11 | zulu-21
|
|
|
206
213
|
sdkvm go install latest | 1.24 | 1.24.5 | golang-1.24
|
|
207
214
|
sdkvm flutter install latest | 3.47 | 3.47.5 | 3.49.0-0.1.pre | flutter-3.47
|
|
208
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
|
|
209
217
|
```
|
|
210
218
|
|
|
211
219
|
### `sdkvm install <version>`
|
|
@@ -221,16 +229,16 @@ sdkvm installed Temurin 21.0.12.1 → ~/.sdkvm/jdks/temurin-21.0.12.1
|
|
|
221
229
|
sdkvm switch to it: sdkvm use 21
|
|
222
230
|
```
|
|
223
231
|
|
|
224
|
-
| 选项
|
|
225
|
-
|
|
226
|
-
| `--vendor <id>` | Java:`temurin`(默认)/ `zulu` / `corretto`。Go 为 `golang`,Flutter 为 `flutter`,Node.js 为 `nodejs` |
|
|
227
|
-
| `--force`
|
|
232
|
+
| 选项 | 说明 |
|
|
233
|
+
| --------------- | ------------------------------------------------------------------------------------------------------- |
|
|
234
|
+
| `--vendor <id>` | Java:`temurin`(默认)/ `zulu` / `corretto`。Go 为 `golang`,Flutter 为 `flutter`,Node.js 为 `nodejs`,Maven 为 `maven` |
|
|
235
|
+
| `--force` | 已安装时删除并重装。默认跳过已安装版本 |
|
|
228
236
|
|
|
229
237
|
校验失败或解压异常时,半成品目录和缓存会被清掉。下载超时是 60 秒无数据,不是总时长上限。
|
|
230
238
|
|
|
231
239
|
### `sdkvm use <version>`
|
|
232
240
|
|
|
233
|
-
在已安装版本中匹配,并更新对应的 `current-*` 链接与 `JAVA_HOME` / `GO_HOME` / `FLUTTER_HOME` / `NODE_HOME` / `PATH`。
|
|
241
|
+
在已安装版本中匹配,并更新对应的 `current-*` 链接与 `JAVA_HOME` / `GO_HOME` / `FLUTTER_HOME` / `NODE_HOME` / `MAVEN_HOME` / `PATH`。
|
|
234
242
|
|
|
235
243
|
```sh
|
|
236
244
|
sdkvm use 21
|
|
@@ -238,9 +246,10 @@ sdkvm use temurin-21.0.5+11
|
|
|
238
246
|
sdkvm go use 1.24.5
|
|
239
247
|
sdkvm flutter use 3.47.5
|
|
240
248
|
sdkvm node use 22.20.0
|
|
249
|
+
sdkvm maven use 3.9
|
|
241
250
|
```
|
|
242
251
|
|
|
243
|
-
macOS / Linux 上,首次 `use` 会向 shell 配置追加初始化块,重开终端或 `source ~/.zshrc` 后生效。之后的切换只改链接。IDE
|
|
252
|
+
macOS / Linux 上,首次 `use` 会向 shell 配置追加初始化块,重开终端或 `source ~/.zshrc` 后生效。之后的切换只改链接。IDE 需要重启才会读到新的环境变量。Maven 需要 JDK:没有 `JAVA_HOME` 时会提示先 `sdkvm java use`。详见[切换机制](#切换机制)。
|
|
244
253
|
|
|
245
254
|
### `sdkvm ls`
|
|
246
255
|
|
|
@@ -280,6 +289,8 @@ flutter: flutter-3.47.5
|
|
|
280
289
|
FLUTTER_HOME → ~/.sdkvm/flutters/flutter-3.47.5
|
|
281
290
|
node: nodejs-22.20.0
|
|
282
291
|
NODE_HOME → ~/.sdkvm/nodes/nodejs-22.20.0
|
|
292
|
+
maven: maven-3.9.9
|
|
293
|
+
MAVEN_HOME → ~/.sdkvm/mavens/maven-3.9.9
|
|
283
294
|
```
|
|
284
295
|
|
|
285
296
|
### `sdkvm uninstall <version>`
|
|
@@ -288,7 +299,7 @@ node: nodejs-22.20.0
|
|
|
288
299
|
|
|
289
300
|
### `sdkvm mirror`
|
|
290
301
|
|
|
291
|
-
按 SDK 类型管理**安装包下载镜像**(不是 npm 包源)。Java:`sdkvm mirror`;其余:`sdkvm go|flutter|node mirror`。作用域互不影响。
|
|
302
|
+
按 SDK 类型管理**安装包下载镜像**(不是 npm 包源)。Java:`sdkvm mirror`;其余:`sdkvm go|flutter|node|maven mirror`。作用域互不影响。
|
|
292
303
|
|
|
293
304
|
```sh
|
|
294
305
|
sdkvm mirror ls
|
|
@@ -297,11 +308,11 @@ sdkvm go mirror use aliyun
|
|
|
297
308
|
sdkvm node mirror use official # 恢复该类型官方源
|
|
298
309
|
```
|
|
299
310
|
|
|
300
|
-
| 动作
|
|
301
|
-
|
|
302
|
-
| `ls` / `current` / `show`
|
|
303
|
-
| `use <site>`
|
|
304
|
-
| `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 |
|
|
305
316
|
|
|
306
317
|
站点覆盖与手填示例见[镜像与 npm 源](#镜像与-npm-源)。
|
|
307
318
|
|
|
@@ -324,20 +335,21 @@ sdkvm nrm test
|
|
|
324
335
|
|
|
325
336
|
`install`、`use`、`uninstall` 共用下表。未列出的组合会被拒绝并给出改写提示。
|
|
326
337
|
|
|
327
|
-
| 语法
|
|
328
|
-
|
|
329
|
-
| `<major>`
|
|
330
|
-
| `<major.minor>`
|
|
331
|
-
| `lts`
|
|
332
|
-
| `latest`
|
|
333
|
-
| `<full-version>` | 精确版本或前缀
|
|
334
|
-
| `<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` |
|
|
335
346
|
|
|
336
347
|
匹配规则:
|
|
337
348
|
|
|
338
|
-
- `21`、`1.24`、`3.47`、`22` 匹配该线已安装或可安装的最新补丁。
|
|
339
|
-
- 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 的精确版本按全串匹配。
|
|
340
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`。
|
|
341
353
|
- Java 的 `lts` 与 Adoptium 列表对齐,当前为 8 / 11 / 17 / 21 / 25。Node.js 的 `lts` 取官方 `index.json` 里最新带 LTS 代号的条目。
|
|
342
354
|
- Node.js 不接受 `22.20` 这种两段式,应写成 `22` 或 `22.20.0`。
|
|
343
355
|
- 省略厂商前缀时使用默认发行版。只有 Java 可以配置默认厂商,见[配置文件](#配置文件)。
|
|
@@ -354,10 +366,12 @@ sdkvm nrm test
|
|
|
354
366
|
├── gos/ # Go:golang-1.24.5
|
|
355
367
|
├── flutters/ # Flutter:flutter-3.47.5
|
|
356
368
|
├── nodes/ # Node.js:nodejs-22.20.0
|
|
369
|
+
├── mavens/ # Maven:maven-3.9.9
|
|
357
370
|
├── current-java # JAVA_HOME 链接(Windows 为 junction)
|
|
358
371
|
├── current-go
|
|
359
372
|
├── current-flutter
|
|
360
373
|
├── current-node
|
|
374
|
+
├── current-maven
|
|
361
375
|
├── runtime/ # 脚本安装的 CLI 运行时,与 current-node 隔离
|
|
362
376
|
├── cli/ # 脚本安装的 CLI 包
|
|
363
377
|
├── bin/ # 脚本安装的入口 sdkvm(需加入 PATH)
|
|
@@ -366,11 +380,11 @@ sdkvm nrm test
|
|
|
366
380
|
└── tmp/ # 解压临时目录,同样会删除
|
|
367
381
|
```
|
|
368
382
|
|
|
369
|
-
解压后的大致体积: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)。
|
|
370
384
|
|
|
371
385
|
### 切换机制
|
|
372
386
|
|
|
373
|
-
macOS / Linux 上,`current-*` 是指向当前版本目录的符号链接。首次 `use` 会向 shell 配置追加带标记的块:zsh 写入 `~/.zshrc`,bash 写入 `~/.bash_profile` 或 `~/.bashrc
|
|
387
|
+
macOS / Linux 上,`current-*` 是指向当前版本目录的符号链接。首次 `use` 会向 shell 配置追加带标记的块:zsh 写入 `~/.zshrc`,bash 写入 `~/.bash_profile` 或 `~/.bashrc`。五种 SDK 各一块。
|
|
374
388
|
|
|
375
389
|
```sh
|
|
376
390
|
# >>> sdkvm java init >>>
|
|
@@ -392,11 +406,16 @@ case ":$PATH:" in *":$FLUTTER_HOME/bin:"*) ;; *) export PATH="$FLUTTER_HOME/bin:
|
|
|
392
406
|
export NODE_HOME="$HOME/.sdkvm/current-node"
|
|
393
407
|
case ":$PATH:" in *":$NODE_HOME/bin:"*) ;; *) export PATH="$NODE_HOME/bin:$PATH";; esac
|
|
394
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 <<<
|
|
395
414
|
```
|
|
396
415
|
|
|
397
416
|
环境变量指向链接。之后的 `use` 只改链接,新终端会读到新值。
|
|
398
417
|
|
|
399
|
-
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。
|
|
400
419
|
|
|
401
420
|
## 配置
|
|
402
421
|
|
|
@@ -412,7 +431,8 @@ Windows 上,四个 `current-*` 都是 junction。`use` 把用户级环境变
|
|
|
412
431
|
"temurin": "https://mirrors.nju.edu.cn/adoptium",
|
|
413
432
|
"golang": "https://golang.google.cn/dl",
|
|
414
433
|
"flutter": "https://mirror.nju.edu.cn/flutter/flutter_infra_release",
|
|
415
|
-
"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"
|
|
416
436
|
},
|
|
417
437
|
"npmRegistries": {
|
|
418
438
|
"myprivate": "http://xxx/registry/"
|
|
@@ -420,23 +440,23 @@ Windows 上,四个 `current-*` 都是 junction。`use` 把用户级环境变
|
|
|
420
440
|
}
|
|
421
441
|
```
|
|
422
442
|
|
|
423
|
-
| 字段
|
|
424
|
-
|
|
425
|
-
| `version`
|
|
426
|
-
| `defaultVendor` | Java 省略厂商前缀时的发行版
|
|
427
|
-
| `mirror`
|
|
428
|
-
| `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 源 | `{}` |
|
|
429
449
|
|
|
430
450
|
### 环境变量
|
|
431
451
|
|
|
432
|
-
| 变量
|
|
433
|
-
|
|
434
|
-
| `SDKVM_HOME`
|
|
435
|
-
| `SDKVM_MIRROR`
|
|
436
|
-
| `SDKVM_QUIET`
|
|
437
|
-
| `SDKVM_NODE_DIST`
|
|
452
|
+
| 变量 | 说明 |
|
|
453
|
+
| -------------------- | ------------------------------------------------------- |
|
|
454
|
+
| `SDKVM_HOME` | 数据根目录,默认 `~/.sdkvm` |
|
|
455
|
+
| `SDKVM_MIRROR` | 临时镜像,优先级高于配置文件,不写入配置 |
|
|
456
|
+
| `SDKVM_QUIET` | 非空时抑制 info 与 warn |
|
|
457
|
+
| `SDKVM_NODE_DIST` | 安装脚本使用的 Node 发行根 URL |
|
|
438
458
|
| `SDKVM_RELEASE_BASE` | 安装脚本与 `sdkvm upgrade` 使用的 GitHub Release 根 URL |
|
|
439
|
-
| `SDKVM_RUNTIME_NODE` | 安装脚本内置的 Node 版本,默认 `22.20.0`
|
|
459
|
+
| `SDKVM_RUNTIME_NODE` | 安装脚本内置的 Node 版本,默认 `22.20.0` |
|
|
440
460
|
|
|
441
461
|
镜像优先级:`SDKVM_MIRROR` > `config.mirror[<vendor>]` > 官方源。详见[镜像与 npm 源](#镜像与-npm-源)。
|
|
442
462
|
|
|
@@ -444,11 +464,11 @@ Windows 上,四个 `current-*` 都是 junction。`use` 把用户级环境变
|
|
|
444
464
|
|
|
445
465
|
两套独立能力,不要混用:
|
|
446
466
|
|
|
447
|
-
|
|
|
448
|
-
|
|
449
|
-
| 改什么 | JDK / Go / Flutter / Node **安装包**下载地址 | **npm 包** registry |
|
|
450
|
-
| 影响
|
|
451
|
-
| 作用域 | 按 SDK 类型分别设置
|
|
467
|
+
| | `sdkvm mirror` | `sdkvm nrm` |
|
|
468
|
+
| ------ | -------------------------------------------- | ------------------- |
|
|
469
|
+
| 改什么 | JDK / Go / Flutter / Node / Maven **安装包**下载地址 | **npm 包** registry |
|
|
470
|
+
| 影响 | `sdkvm … install` | `npm install` |
|
|
471
|
+
| 作用域 | 按 SDK 类型分别设置 | 用户级全局 |
|
|
452
472
|
|
|
453
473
|
### SDK 安装包镜像
|
|
454
474
|
|
|
@@ -459,15 +479,16 @@ sdkvm mirror use nju
|
|
|
459
479
|
sdkvm go mirror use nju
|
|
460
480
|
sdkvm flutter mirror use nju
|
|
461
481
|
sdkvm node mirror use nju
|
|
482
|
+
sdkvm maven mirror use aliyun
|
|
462
483
|
```
|
|
463
484
|
|
|
464
|
-
| 站点
|
|
465
|
-
|
|
466
|
-
| `nju`
|
|
467
|
-
| `tuna`
|
|
468
|
-
| `aliyun`
|
|
469
|
-
| `huawei`
|
|
470
|
-
| `official` | 清空本类型
|
|
485
|
+
| 站点 | Java (temurin) | Go | Flutter | Node.js | Maven |
|
|
486
|
+
| ---------- | -------------- | ---------- | ---------- | --------------------- | ---------- |
|
|
487
|
+
| `nju` | ✓ | ✓ | ✓ | ✓ | — |
|
|
488
|
+
| `tuna` | ✓ | — | ✓ | —(归档不全,未收录) | — |
|
|
489
|
+
| `aliyun` | — | ✓ | — | ✓ | ✓ |
|
|
490
|
+
| `huawei` | — | — | — | ✓ | ✓ |
|
|
491
|
+
| `official` | 清空本类型 | 清空本类型 | 清空本类型 | 清空本类型 | 清空本类型 |
|
|
471
492
|
|
|
472
493
|
手填 URL 或临时覆盖:
|
|
473
494
|
|
|
@@ -476,15 +497,16 @@ sdkvm go mirror set golang https://golang.google.cn/dl
|
|
|
476
497
|
SDKVM_MIRROR=https://golang.google.cn/dl sdkvm go install 1.24
|
|
477
498
|
```
|
|
478
499
|
|
|
479
|
-
优先级:`SDKVM_MIRROR` > `config.mirror[<vendor>]` >
|
|
500
|
+
优先级:`SDKVM_MIRROR` > `config.mirror[<vendor>]` > 官方源。镜像只替换归档下载地址;版本元数据与校验和优先走官方 API。官方校验源不可达、且校验文件是归档旁路(Maven `.sha512`、Temurin `.json`)时,改拉镜像上的同一文件再核对。两边都拿不到,或哈希不一致,安装仍失败。
|
|
480
501
|
|
|
481
|
-
| 厂商
|
|
482
|
-
|
|
483
|
-
| Temurin
|
|
484
|
-
| Go
|
|
485
|
-
| Flutter
|
|
486
|
-
| Node.js
|
|
487
|
-
|
|
|
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 直发,暂不支持镜像 |
|
|
488
510
|
|
|
489
511
|
### npm registry
|
|
490
512
|
|
|
@@ -496,8 +518,8 @@ sdkvm nrm test # 测延迟
|
|
|
496
518
|
|
|
497
519
|
## 安全性
|
|
498
520
|
|
|
499
|
-
- 下载地址来自官方 API:Adoptium、Azul Metadata、Corretto、go.dev/dl、Flutter releases、nodejs.org/dist `index.json`。不抓取搜索页。
|
|
500
|
-
- 归档按块计算 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`)。校验源不可达时:官方下载警告并继续;走镜像时先试官方旁路,失败再试镜像上的同一文件。两边都拿不到,或哈希不一致,安装失败。
|
|
501
523
|
- 解压后检查单根目录和可执行文件,并且只解压到新的空目录。
|
|
502
524
|
- 安装与 `sdkvm upgrade` 持有 `~/.sdkvm/.lock`,避免并发写互相覆盖。
|
|
503
525
|
|
|
@@ -520,7 +542,8 @@ set -gx JAVA_HOME $HOME/.sdkvm/current-java
|
|
|
520
542
|
set -gx GO_HOME $HOME/.sdkvm/current-go
|
|
521
543
|
set -gx FLUTTER_HOME $HOME/.sdkvm/current-flutter
|
|
522
544
|
set -gx NODE_HOME $HOME/.sdkvm/current-node
|
|
523
|
-
|
|
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
|
|
524
547
|
```
|
|
525
548
|
|
|
526
549
|
### Flutter 下载慢或中断
|
|
@@ -565,17 +588,18 @@ rm -rf ~/.sdkvm/bin ~/.sdkvm/cli ~/.sdkvm/runtime
|
|
|
565
588
|
|
|
566
589
|
Windows 对应删除 `%USERPROFILE%\.sdkvm\bin\sdkvm.cmd`,以及 `%USERPROFILE%\.sdkvm\cli` 与 `%USERPROFILE%\.sdkvm\runtime`,并从用户 PATH 移除 `%USERPROFILE%\.sdkvm\bin`。
|
|
567
590
|
|
|
568
|
-
确认不再需要已安装的 JDK、Go、Flutter、Node.js 之后,再删除数据目录:
|
|
591
|
+
确认不再需要已安装的 JDK、Go、Flutter、Node.js、Maven 之后,再删除数据目录:
|
|
569
592
|
|
|
570
593
|
```sh
|
|
571
594
|
rm -rf ~/.sdkvm
|
|
572
595
|
```
|
|
573
596
|
|
|
574
597
|
同时删除 shell 配置里:
|
|
598
|
+
|
|
575
599
|
- `# >>> sdkvm path >>>` … `# <<< sdkvm path <<<`
|
|
576
|
-
- 各 SDK 的 `>>> sdkvm java|go|flutter|node init >>>` … `<<< … <<<`
|
|
600
|
+
- 各 SDK 的 `>>> sdkvm java|go|flutter|node|maven init >>>` … `<<< … <<<`
|
|
577
601
|
|
|
578
|
-
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`。
|
|
579
603
|
|
|
580
604
|
## 开发
|
|
581
605
|
|
|
@@ -593,8 +617,8 @@ npm run build
|
|
|
593
617
|
src/
|
|
594
618
|
├── cli/ # install / use / ls / uninstall / mirror / nrm / upgrade
|
|
595
619
|
├── core/ # 版本解析、注册表、配置、文件锁
|
|
596
|
-
├── sdk/ # java / go / flutter / node 的目录、环境变量、版本语法
|
|
597
|
-
├── vendor/ # temurin / zulu / corretto / golang / flutter / nodejs 与镜像改写
|
|
620
|
+
├── sdk/ # java / go / flutter / node / maven 的目录、环境变量、版本语法
|
|
621
|
+
├── vendor/ # temurin / zulu / corretto / golang / flutter / nodejs / maven 与镜像改写
|
|
598
622
|
├── fs/ # 解压、目录归一化、链接
|
|
599
623
|
├── shell/ # rc 写入、Windows 注册表
|
|
600
624
|
├── net/ # fetch、流式下载、校验
|
|
@@ -605,4 +629,4 @@ src/
|
|
|
605
629
|
|
|
606
630
|
## 许可证
|
|
607
631
|
|
|
608
|
-
[MIT](./LICENSE) ©
|
|
632
|
+
[MIT](./LICENSE) © 秦佬湿
|