fnva 0.0.4 → 0.0.5
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.md +189 -68
- package/package.json +1 -1
- package/platforms/fnva +0 -0
- package/platforms/fnva.exe +0 -0
- package/platforms/skip.txt +1 -0
package/README.md
CHANGED
|
@@ -1,73 +1,50 @@
|
|
|
1
|
-
#
|
|
1
|
+
# fnva - Fast Node Version Manager for Java
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
类似 fnm 的跨平台 Java 环境管理工具,支持默认环境设置和自动加载。
|
|
4
4
|
|
|
5
5
|
## 功能特性
|
|
6
6
|
|
|
7
7
|
- ✅ **Java 环境管理**:快速切换不同版本的 JDK
|
|
8
|
+
- ✅ **默认环境支持**:类似 fnm,支持设置默认 Java 环境
|
|
9
|
+
- ✅ **自动加载**:新 Shell 会话自动加载默认环境
|
|
10
|
+
- ✅ **智能扫描**:高效扫描系统 Java 安装,支持自定义路径
|
|
8
11
|
- ✅ **LLM 环境管理**:支持多 LLM 提供商配置切换
|
|
9
12
|
- ✅ **跨平台支持**:Windows、macOS、Linux
|
|
10
13
|
- ✅ **多 Shell 支持**:bash、zsh、fish、PowerShell、CMD
|
|
11
|
-
- ✅
|
|
14
|
+
- ✅ **配置化扫描**:支持配置文件和环境变量自定义扫描路径
|
|
15
|
+
- ✅ **高效去重**:智能去除重复的 Java 环境条目
|
|
12
16
|
- ✅ **环境变量引用**:支持 `${VAR_NAME}` 格式引用系统环境变量
|
|
13
17
|
|
|
14
18
|
## 安装
|
|
15
19
|
|
|
16
|
-
###
|
|
17
|
-
|
|
18
|
-
```bash
|
|
19
|
-
# 全局安装
|
|
20
|
-
npm install -g fnva
|
|
21
|
-
|
|
22
|
-
# 或使用 yarn
|
|
23
|
-
yarn global add fnva
|
|
24
|
-
|
|
25
|
-
# 或使用 pnpm
|
|
26
|
-
pnpm add -g fnva
|
|
27
|
-
```
|
|
28
|
-
|
|
29
|
-
安装完成后,可以直接使用 `fnva` 命令。
|
|
30
|
-
|
|
31
|
-
### 从源码构建
|
|
32
|
-
|
|
33
|
-
#### 本地构建(当前平台)
|
|
20
|
+
### 从源码构建(推荐)
|
|
34
21
|
|
|
35
22
|
```bash
|
|
36
23
|
git clone <repository-url>
|
|
37
|
-
cd
|
|
38
|
-
|
|
24
|
+
cd fnva
|
|
25
|
+
cargo build --release
|
|
39
26
|
```
|
|
40
27
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
#### 构建所有平台
|
|
44
|
-
|
|
45
|
-
项目使用 GitHub Actions 自动构建所有平台的二进制文件。当创建版本标签时,会自动构建并发布到 npm。
|
|
28
|
+
### 通过 Cargo 安装
|
|
46
29
|
|
|
47
|
-
**手动触发构建:**
|
|
48
|
-
1. 在 GitHub 上创建新的 Release 标签(例如 `v0.1.0`)
|
|
49
|
-
2. GitHub Actions 会自动构建所有平台
|
|
50
|
-
3. 构建完成后自动发布到 npm
|
|
51
|
-
|
|
52
|
-
**本地构建所有平台(需要交叉编译工具):**
|
|
53
30
|
```bash
|
|
54
|
-
|
|
31
|
+
cargo install --path .
|
|
55
32
|
```
|
|
56
33
|
|
|
57
|
-
注意:需要安装 `cross` 工具:`cargo install cross`
|
|
58
|
-
|
|
59
34
|
### 添加到 PATH
|
|
60
35
|
|
|
61
|
-
将二进制文件复制到系统 PATH
|
|
36
|
+
将二进制文件复制到系统 PATH 中:
|
|
62
37
|
|
|
63
38
|
```bash
|
|
64
39
|
# Linux/macOS
|
|
65
|
-
sudo
|
|
40
|
+
sudo cp target/release/fnva /usr/local/bin/fnva
|
|
66
41
|
|
|
67
42
|
# 或添加到 ~/.bashrc 或 ~/.zshrc
|
|
68
43
|
export PATH="$PATH:$(pwd)/target/release"
|
|
69
44
|
```
|
|
70
45
|
|
|
46
|
+
Windows 用户需要将 `target\release\fnva.exe` 添加到 PATH 环境变量中。
|
|
47
|
+
|
|
71
48
|
## 使用方法
|
|
72
49
|
|
|
73
50
|
### Java 环境管理
|
|
@@ -78,12 +55,6 @@ export PATH="$PATH:$(pwd)/target/release"
|
|
|
78
55
|
fnva java list
|
|
79
56
|
```
|
|
80
57
|
|
|
81
|
-
#### 扫描系统中的 Java 安装
|
|
82
|
-
|
|
83
|
-
```bash
|
|
84
|
-
fnva java scan
|
|
85
|
-
```
|
|
86
|
-
|
|
87
58
|
#### 添加 Java 环境
|
|
88
59
|
|
|
89
60
|
```bash
|
|
@@ -93,11 +64,36 @@ fnva java add --name jdk-17 --home /usr/lib/jvm/java-17-openjdk --description "O
|
|
|
93
64
|
#### 切换到 Java 环境
|
|
94
65
|
|
|
95
66
|
```bash
|
|
96
|
-
#
|
|
67
|
+
# Bash / Zsh
|
|
97
68
|
eval "$(fnva java use jdk-17)"
|
|
98
69
|
|
|
99
|
-
#
|
|
100
|
-
|
|
70
|
+
# Fish
|
|
71
|
+
fnva java use jdk-17 --shell fish | source
|
|
72
|
+
|
|
73
|
+
# PowerShell
|
|
74
|
+
fnva java use jdk-17 --shell powershell | Invoke-Expression
|
|
75
|
+
|
|
76
|
+
# CMD
|
|
77
|
+
fnva java use jdk-17 --shell cmd > %TEMP%\fnva_use.cmd && call %TEMP%\fnva_use.cmd
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
#### 设置默认 Java 环境(类似 fnm)
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
# 设置默认环境
|
|
84
|
+
fnva java default jdk-21
|
|
85
|
+
|
|
86
|
+
# 查看当前默认环境
|
|
87
|
+
fnva java default
|
|
88
|
+
|
|
89
|
+
# 清除默认设置
|
|
90
|
+
fnva java default --unset
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
#### 查看当前激活的环境
|
|
94
|
+
|
|
95
|
+
```bash
|
|
96
|
+
fnva java current
|
|
101
97
|
```
|
|
102
98
|
|
|
103
99
|
#### 删除 Java 环境
|
|
@@ -106,6 +102,52 @@ eval "$(fnva java use jdk-17 --shell bash)"
|
|
|
106
102
|
fnva java remove jdk-17
|
|
107
103
|
```
|
|
108
104
|
|
|
105
|
+
#### 扫描系统中的 Java 安装
|
|
106
|
+
|
|
107
|
+
```bash
|
|
108
|
+
fnva java scan
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
**扫描功能详解:**
|
|
112
|
+
|
|
113
|
+
**基础扫描:**
|
|
114
|
+
- 自动检测系统标准 Java 安装路径
|
|
115
|
+
- 扫描用户主目录下的 `.fnva/java-packages`
|
|
116
|
+
- 检查 PATH 环境变量中的 Java 可执行文件
|
|
117
|
+
|
|
118
|
+
**自定义扫描路径:**
|
|
119
|
+
|
|
120
|
+
1. **配置文件方式**(推荐):
|
|
121
|
+
```toml
|
|
122
|
+
# ~/.fnva/config.toml
|
|
123
|
+
custom_java_scan_paths = [
|
|
124
|
+
"D:\\tools\\java",
|
|
125
|
+
"/opt/custom/java",
|
|
126
|
+
"/home/user/my-jdks"
|
|
127
|
+
]
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
2. **环境变量方式**:
|
|
131
|
+
```bash
|
|
132
|
+
# 临时添加扫描路径
|
|
133
|
+
export FNVA_SCAN_PATHS="/path/to/jdk1:/path/to/jdk2"
|
|
134
|
+
fnva java scan
|
|
135
|
+
|
|
136
|
+
# Windows
|
|
137
|
+
set FNVA_SCAN_PATHS=D:\tools\java;E:\other\java
|
|
138
|
+
fnva java scan
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
**扫描性能:**
|
|
142
|
+
- 🔒 **安全**:只扫描指定路径,不进行全盘搜索
|
|
143
|
+
- ⚡ **快速**:使用高效的去重算法,避免重复处理
|
|
144
|
+
- 🎯 **精确**:智能识别 Java 安装,过滤无效路径
|
|
145
|
+
|
|
146
|
+
**支持的扫描路径:**
|
|
147
|
+
- Windows:`C:\Program Files\Java`、`C:\Program Files\Eclipse Adoptium` 等
|
|
148
|
+
- macOS:`/Library/Java/JavaVirtualMachines`、`/opt/homebrew/Caskroom` 等
|
|
149
|
+
- Linux:`/usr/lib/jvm`、`/opt/java`、`/usr/local/java` 等
|
|
150
|
+
|
|
109
151
|
### LLM 环境管理
|
|
110
152
|
|
|
111
153
|
#### 列出所有 LLM 环境
|
|
@@ -209,20 +251,51 @@ provider = "openai"
|
|
|
209
251
|
api_key = "${OPENAI_API_KEY}" # 从系统环境变量读取
|
|
210
252
|
```
|
|
211
253
|
|
|
212
|
-
## Shell
|
|
254
|
+
## Shell 集成(fnm 风格)
|
|
255
|
+
|
|
256
|
+
### PowerShell(推荐)
|
|
257
|
+
|
|
258
|
+
在你的 PowerShell Profile 中添加以下内容以启用 fnm 风格的自动环境切换:
|
|
259
|
+
|
|
260
|
+
```powershell
|
|
261
|
+
# fnva 环境集成(类似 fnm env)
|
|
262
|
+
fnva env env --shell powershell | Out-String | Invoke-Expression
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
#### 功能特性
|
|
266
|
+
|
|
267
|
+
- **自动加载默认环境**:新 PowerShell 会话自动加载设置的默认 Java 环境
|
|
268
|
+
- **环境持久化**:重启 PowerShell 后自动恢复上次的 Java 环境
|
|
269
|
+
- **智能切换函数**:提供 `fnva java use` 交互式切换功能
|
|
270
|
+
- **Shell 函数集成**:自动添加 PowerShell 函数用于环境切换
|
|
271
|
+
|
|
272
|
+
#### 使用示例
|
|
273
|
+
|
|
274
|
+
```powershell
|
|
275
|
+
# 1. 设置默认环境
|
|
276
|
+
fnva java default jdk21
|
|
277
|
+
|
|
278
|
+
# 2. 重启 PowerShell 后会自动加载默认环境
|
|
279
|
+
# 显示: "Loading default Java environment: jdk21"
|
|
280
|
+
|
|
281
|
+
# 3. 交互式切换
|
|
282
|
+
fnva java use jdk17
|
|
283
|
+
|
|
284
|
+
# 4. 查看当前环境
|
|
285
|
+
fnva java current
|
|
286
|
+
```
|
|
213
287
|
|
|
214
288
|
### Bash/Zsh
|
|
215
289
|
|
|
216
290
|
在 `~/.bashrc` 或 `~/.zshrc` 中添加:
|
|
217
291
|
|
|
218
292
|
```bash
|
|
219
|
-
#
|
|
293
|
+
# fnva 环境集成
|
|
294
|
+
eval "$(fnva env env --shell bash)"
|
|
295
|
+
|
|
296
|
+
# 或使用别名快速切换
|
|
220
297
|
alias java17='eval "$(fnva java use jdk-17)"'
|
|
221
298
|
alias java11='eval "$(fnva java use jdk-11)"'
|
|
222
|
-
|
|
223
|
-
# 快速切换 LLM 环境
|
|
224
|
-
alias llm-openai='eval "$(fnva llm use openai-dev)"'
|
|
225
|
-
alias llm-anthropic='eval "$(fnva llm use anthropic-prod)"'
|
|
226
299
|
```
|
|
227
300
|
|
|
228
301
|
### Fish
|
|
@@ -230,31 +303,79 @@ alias llm-anthropic='eval "$(fnva llm use anthropic-prod)"'
|
|
|
230
303
|
在 `~/.config/fish/config.fish` 中添加:
|
|
231
304
|
|
|
232
305
|
```fish
|
|
306
|
+
# fnva 环境集成
|
|
307
|
+
fnva env env --shell fish | source
|
|
308
|
+
|
|
309
|
+
# 或定义函数
|
|
233
310
|
function java17
|
|
234
311
|
fnva java use jdk-17 | source
|
|
235
312
|
end
|
|
236
313
|
|
|
237
|
-
function
|
|
238
|
-
fnva
|
|
314
|
+
function java11
|
|
315
|
+
fnva java use jdk-11 | source
|
|
239
316
|
end
|
|
240
317
|
```
|
|
241
318
|
|
|
242
|
-
|
|
319
|
+
## 工作原理
|
|
243
320
|
|
|
244
|
-
|
|
321
|
+
### 默认环境管理
|
|
245
322
|
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
323
|
+
fnva 类似 fnm 的工作方式:
|
|
324
|
+
|
|
325
|
+
1. **设置默认环境**:
|
|
326
|
+
```bash
|
|
327
|
+
fnva java default jdk21
|
|
328
|
+
```
|
|
329
|
+
|
|
330
|
+
2. **Shell 集成**:在 Shell Profile 中添加环境切换脚本
|
|
331
|
+
|
|
332
|
+
3. **自动加载**:新 Shell 会话自动检测并加载默认环境
|
|
333
|
+
|
|
334
|
+
4. **环境持久化**:环境配置保存在 `~/.fnva/config.toml` 中
|
|
335
|
+
|
|
336
|
+
### 配置文件位置
|
|
337
|
+
|
|
338
|
+
- **Linux/macOS**: `~/.fnva/config.toml`
|
|
339
|
+
- **Windows**: `%USERPROFILE%\.fnva\config.toml`
|
|
340
|
+
|
|
341
|
+
#### 配置示例
|
|
342
|
+
|
|
343
|
+
**基础配置:**
|
|
344
|
+
```toml
|
|
345
|
+
default_java_env = "jdk21.0.6"
|
|
346
|
+
|
|
347
|
+
[[java_environments]]
|
|
348
|
+
name = "jdk21.0.6"
|
|
349
|
+
java_home = "E:\\env\\jdks\\jdk-21.0.6"
|
|
350
|
+
description = "Java 21.0.6 LTS"
|
|
256
351
|
```
|
|
257
352
|
|
|
353
|
+
**自定义扫描路径配置:**
|
|
354
|
+
```toml
|
|
355
|
+
# 自定义 Java 扫描路径
|
|
356
|
+
custom_java_scan_paths = [
|
|
357
|
+
"D:\\tools\\java",
|
|
358
|
+
"/opt/custom/java",
|
|
359
|
+
"/home/user/my-jdks"
|
|
360
|
+
]
|
|
361
|
+
```
|
|
362
|
+
|
|
363
|
+
**环境变量支持:**
|
|
364
|
+
```bash
|
|
365
|
+
# Linux/macOS
|
|
366
|
+
export FNVA_SCAN_PATHS="/path/to/jdk1:/path/to/jdk2"
|
|
367
|
+
|
|
368
|
+
# Windows
|
|
369
|
+
set FNVA_SCAN_PATHS=D:\tools\java;E:\other\java
|
|
370
|
+
```
|
|
371
|
+
|
|
372
|
+
**支持的扫描路径类型:**
|
|
373
|
+
- 系统标准 Java 安装目录
|
|
374
|
+
- 用户主目录下的 `.fnva/java-packages`
|
|
375
|
+
- 配置文件中的自定义路径
|
|
376
|
+
- 环境变量 `FNVA_SCAN_PATHS` 指定的路径
|
|
377
|
+
- PATH 环境变量中的 Java 可执行文件
|
|
378
|
+
|
|
258
379
|
## 许可证
|
|
259
380
|
|
|
260
381
|
MIT License
|
package/package.json
CHANGED
package/platforms/fnva
CHANGED
|
Binary file
|
package/platforms/fnva.exe
CHANGED
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Skipping cross-compiled build for aarch64-unknown-linux-gnu
|