docs(guidelines): 更新编码指南并添加工作日志和开发工具文档
- 简化 AGENTS.md 文档结构,更新构建命令和代码风格指南 - 新增 2026 年 1 月工作日志记录项目进展和问题解决 - 添加 Cursor 连接 WSL 开发完整教程,涵盖环境配置和最佳实践 - 创建 SDKMAN Java 和 Maven 版本管理指南,支持多项目环境 - 编写 Windows Jabba Java 版本管理文档,提供 PowerShell 集成方案
This commit is contained in:
233
AGENTS.md
233
AGENTS.md
@@ -1,218 +1,159 @@
|
|||||||
# AGENTS.md - MyBlog 编码指南
|
# AGENTS.md - MyBlog 编码指南
|
||||||
|
|
||||||
本文档为在此 VuePress 博客项目中工作的智能编码助手提供指南。
|
AI 智能助手在此 VuePress 博客项目中的工作指南。
|
||||||
|
|
||||||
## 项目概述
|
## 项目概述
|
||||||
|
|
||||||
这是一个基于以下技术构建的个人博客:
|
- **框架**: VuePress v2(静态站点生成器)
|
||||||
- **框架**: VuePress v2 (静态站点生成器)
|
|
||||||
- **主题**: VuePress Theme Hope
|
- **主题**: VuePress Theme Hope
|
||||||
- **语言**: TypeScript + Vue 3
|
- **语言**: TypeScript + Vue 3
|
||||||
- **构建工具**: Vite
|
- **构建工具**: Vite
|
||||||
- **包管理器**: npm
|
- **包管理器**: npm
|
||||||
|
|
||||||
## 构建/代码检查/测试命令
|
## 构建命令
|
||||||
|
|
||||||
### 开发
|
|
||||||
```bash
|
```bash
|
||||||
# 启动开发服务器
|
# 开发
|
||||||
npm run docs:dev
|
npm run docs:dev # 启动开发服务器
|
||||||
|
npm run docs:clean-dev # 清除缓存后启动
|
||||||
|
|
||||||
# 清除缓存后启动开发服务器
|
# 构建与部署
|
||||||
npm run docs:clean-dev
|
npm run docs:build # 生产构建
|
||||||
|
|
||||||
# 构建生产版本
|
# 维护
|
||||||
npm run docs:build
|
npm run docs:update-package # 更新 VuePress 包
|
||||||
|
npm run update:browsers # 更新 browserslist
|
||||||
|
|
||||||
# 更新 VuePress 包
|
# 类型检查
|
||||||
npm run docs:update-package
|
npx tsc --noEmit # TypeScript 检查
|
||||||
|
|
||||||
# 更新 browserslist 数据库
|
|
||||||
npm run update:browsers
|
|
||||||
```
|
```
|
||||||
|
|
||||||
### 测试与质量
|
## 文件结构
|
||||||
本项目没有配置显式的测试命令。由于是 VuePress 博客:
|
|
||||||
- package.json 中没有配置单元测试
|
|
||||||
- 通过 `npm run docs:build` 进行构建验证
|
|
||||||
- 通过 `npm run docs:dev` 进行开发服务器验证
|
|
||||||
|
|
||||||
### 类型检查
|
|
||||||
```bash
|
|
||||||
# TypeScript 类型检查(如果需要)
|
|
||||||
npx tsc --noEmit
|
|
||||||
```
|
|
||||||
|
|
||||||
## 代码风格指南
|
|
||||||
|
|
||||||
### 文件结构
|
|
||||||
```
|
```
|
||||||
src/
|
src/
|
||||||
├── .vuepress/ # VuePress 配置
|
├── .vuepress/
|
||||||
│ ├── config.ts # 站点配置
|
│ ├── config.ts # 站点配置
|
||||||
│ ├── theme.ts # 主题配置
|
│ ├── theme.ts # 主题配置
|
||||||
│ ├── navbar.ts # 导航栏配置
|
│ ├── navbar.ts # 导航配置
|
||||||
│ ├── sidebar.ts # 侧边栏配置
|
│ ├── sidebar.ts # 侧边栏配置
|
||||||
│ ├── styles/ # 自定义样式
|
│ ├── styles/ # 自定义 SCSS
|
||||||
│ └── components/ # Vue 组件
|
│ └── components/ # Vue 组件
|
||||||
├── programming/ # 编程相关文章
|
├── programming/ # 编程文章
|
||||||
├── apps/ # 应用部署指南
|
├── apps/ # 应用部署指南
|
||||||
├── tools/ # 工具分享
|
├── tools/ # 工具分享
|
||||||
├── work/ # 工作日志
|
├── work/ # 工作日志
|
||||||
└── README.md # 首页
|
└── README.md # 首页
|
||||||
```
|
```
|
||||||
|
|
||||||
### TypeScript 配置
|
## 代码风格
|
||||||
- **模块系统**: ES 模块 (package.json 中的 `"type": "module"`)
|
|
||||||
- **目标版本**: ES2022
|
|
||||||
- **模块解析**: NodeNext
|
|
||||||
- **包含文件**: `src/.vuepress/**/*.ts` 和 `src/.vuepress/**/*.vue`
|
|
||||||
|
|
||||||
### 导入语句
|
### TypeScript
|
||||||
- 使用 ES 模块导入: `import { defineUserConfig } from "vuepress";`
|
- **模块**: ES 模块(`"type": "module"`)
|
||||||
- 需要时显式导入类型
|
- **目标**: ES2022
|
||||||
- 分组导入:框架导入在前,本地导入在后
|
- **解析**: NodeNext
|
||||||
- 使用 config.ts 中定义的路径别名(如果可用)
|
- 函数参数和返回值使用显式类型
|
||||||
|
- 复杂数据结构使用接口
|
||||||
|
|
||||||
### TypeScript 使用
|
### 导入
|
||||||
- 所有配置文件都使用 TypeScript
|
- 使用 ES 模块:`import { defineUserConfig } from "vuepress"`
|
||||||
- 为函数参数和返回值定义显式类型
|
- 分组导入:框架优先,本地其次
|
||||||
- 对复杂数据结构使用接口
|
- 使用 config.ts 中定义的路径别名
|
||||||
- 结合 TypeScript 使用 Vue 3 的 Composition API
|
|
||||||
|
|
||||||
### Vue 组件
|
### Vue 组件
|
||||||
- 使用 Vue 3 Composition API 和 `<script setup>` 语法
|
- 使用 Vue 3 Composition API 和 `<script setup>`
|
||||||
- 使用 TypeScript 接口定义 props
|
- 使用 TypeScript 接口定义 props
|
||||||
- 使用 `ref()` 和 `reactive()` 处理响应式状态
|
- 使用 `ref()` 和 `reactive()` 管理状态
|
||||||
- 遵循现有组件的 VuePress 组件模式
|
- 自定义组件放在 `src/.vuepress/components/`
|
||||||
|
|
||||||
### Markdown 文件
|
### Markdown
|
||||||
- 使用 YAML frontmatter 存储元数据:
|
- 使用 YAML frontmatter:
|
||||||
```yaml
|
```yaml
|
||||||
---
|
---
|
||||||
title: 文章标题
|
title: 文章标题
|
||||||
icon: simple-icons:iconname
|
icon: simple-icons:iconname
|
||||||
date: YYYY-MM-DD
|
date: YYYY-MM-DD
|
||||||
category:
|
category:
|
||||||
- 分类名称
|
- 分类
|
||||||
tag:
|
tag:
|
||||||
- 标签1
|
- 标签1
|
||||||
- 标签2
|
- 标签2
|
||||||
---
|
---
|
||||||
```
|
```
|
||||||
- 包含 `<!-- more -->` 标签作为文章摘要
|
- 包含 `<!-- more -->` 作为摘要
|
||||||
- 使用中文内容 (zh-CN)
|
- 内容使用中文(zh-CN)
|
||||||
- 遵循现有文章结构,包含清晰的章节
|
|
||||||
|
|
||||||
### 命名约定
|
### 命名约定
|
||||||
- **文件**: Markdown 文件使用 kebab-case,Vue 组件使用 PascalCase
|
- **文件**: Markdown 使用 kebab-case,Vue 使用 PascalCase
|
||||||
- **变量**: camelCase
|
- **变量**: camelCase
|
||||||
- **常量**: UPPER_SNAKE_CASE
|
- **常量**: UPPER_SNAKE_CASE
|
||||||
- **函数**: camelCase,描述性名称
|
- **函数**: camelCase(描述性名称)
|
||||||
- **类型/接口**: PascalCase
|
- **类型/接口**: PascalCase
|
||||||
- **目录**: kebab-case
|
- **目录**: kebab-case
|
||||||
|
|
||||||
|
### 格式化
|
||||||
|
- **缩进**: 2 个空格
|
||||||
|
- **行长度**: 80-100 字符
|
||||||
|
- **分号**: 必需
|
||||||
|
- **引号**: 字符串使用单引号,模板使用反引号
|
||||||
|
- **尾随逗号**: 多行时使用
|
||||||
|
|
||||||
|
### CSS/SCSS
|
||||||
|
- 使用 SCSS(已安装 sass-embedded)
|
||||||
|
- 自定义类遵循 BEM 命名
|
||||||
|
- 使用 CSS 变量进行主题化
|
||||||
|
|
||||||
### 错误处理
|
### 错误处理
|
||||||
- 对异步操作使用 try-catch
|
- 异步操作使用 try-catch
|
||||||
- 验证配置对象
|
- 验证配置对象
|
||||||
- 提供有意义的错误信息
|
- 提供有意义的错误信息
|
||||||
- 适当记录错误(开发时使用 console.error)
|
- 使用 console.error 进行调试
|
||||||
|
|
||||||
### 格式化
|
## Git 实践
|
||||||
- **缩进**: 2 个空格(不使用制表符)
|
|
||||||
- **行长度**: 目标 80-100 个字符
|
|
||||||
- **分号**: 使用分号
|
|
||||||
- **引号**: 字符串使用单引号,模板字面量使用反引号
|
|
||||||
- **尾随逗号**: 在多行对象和数组中使用
|
|
||||||
|
|
||||||
### CSS/样式
|
- **提交**: 约定式提交格式
|
||||||
- 使用 SCSS 进行自定义样式(已安装 sass-embedded)
|
- **分支**: feature/描述、fix/描述、docs/描述
|
||||||
- 自定义类遵循 BEM 命名约定
|
|
||||||
- 使用 CSS 自定义属性(变量)进行主题化
|
|
||||||
- 利用 VuePress Theme Hope 的内置样式
|
|
||||||
|
|
||||||
### Git 实践
|
## 智能助手指令
|
||||||
- **提交消息**: 使用约定式提交格式
|
|
||||||
- **分支命名**: feature/描述, fix/描述, docs/描述
|
|
||||||
- **.gitignore**: 已配置为忽略 node_modules、dist、缓存文件
|
|
||||||
|
|
||||||
### 配置文件
|
1. **修改前**: 运行 `npm run docs:dev` 验证
|
||||||
- **config.ts**: 主要 VuePress 配置
|
2. **修改后**: 运行 `npm run docs:build` 确保构建成功
|
||||||
- **theme.ts**: 主题自定义
|
3. **新文章**: 遵循现有 frontmatter 模式
|
||||||
- **navbar.ts**: 导航结构
|
4. **配置修改**: 检查现有配置模式
|
||||||
- **sidebar.ts**: 侧边栏组织
|
5. **新组件**: 使用 Vue 3 模式,放在 components/ 目录
|
||||||
- 遵循这些文件中的现有模式
|
6. **依赖更新**: 使用 `npm run docs:update-package`
|
||||||
|
|
||||||
### 性能考虑
|
|
||||||
- 优化 `src/.vuepress/public/` 中的图片
|
|
||||||
- 对图片使用懒加载 (`imgLazyload: true`)
|
|
||||||
- 通过仅导入所需组件来最小化打包大小
|
|
||||||
- 使用 VuePress 内置优化
|
|
||||||
|
|
||||||
### 可访问性
|
|
||||||
- 使用语义化 HTML 元素
|
|
||||||
- 为图片提供 alt 文本
|
|
||||||
- 确保正确的标题层级
|
|
||||||
- 保持键盘导航支持
|
|
||||||
|
|
||||||
### 国际化
|
|
||||||
- 主要语言: 中文 (zh-CN)
|
|
||||||
- 在 `config.ts` 中配置: `lang: "zh-CN"`
|
|
||||||
- 所有面向用户的内容使用中文
|
|
||||||
- 保持一致的术语
|
|
||||||
|
|
||||||
### 部署
|
|
||||||
- 构建输出: `src/.vuepress/dist/`
|
|
||||||
- 兼容静态托管
|
|
||||||
- 如果需要,在 `config.ts` 中配置基础路径
|
|
||||||
- 确保所有相对路径正常工作
|
|
||||||
|
|
||||||
## 智能助手特定指令
|
|
||||||
|
|
||||||
1. **修改前**: 始终运行 `npm run docs:dev` 验证更改是否有效
|
|
||||||
2. **修改后**: 运行 `npm run docs:build` 确保生产构建成功
|
|
||||||
3. **添加文章时**: 遵循现有的 frontmatter 和结构模式
|
|
||||||
4. **修改配置时**: 检查现有配置文件中的模式
|
|
||||||
5. **创建组件时**: 放置在 `src/.vuepress/components/` 并遵循 Vue 3 模式
|
|
||||||
6. **更新依赖时**: 使用 `npm run docs:update-package` 更新 VuePress 包
|
|
||||||
|
|
||||||
## 常见任务
|
## 常见任务
|
||||||
|
|
||||||
### 添加新文章
|
### 添加新文章
|
||||||
1. 在适当目录中创建 Markdown 文件
|
1. 在适当目录创建 Markdown 文件
|
||||||
2. 添加包含标题、日期、分类、标签的 YAML frontmatter
|
2. 添加包含标题、日期、分类、标签的 YAML frontmatter
|
||||||
3. 编写包含清晰章节标题的内容
|
3. 编写包含清晰标题的内容
|
||||||
4. 包含 `<!-- more -->` 标签作为摘要
|
4. 包含 `<!-- more -->` 摘要标记
|
||||||
5. 如果需要,添加到侧边栏配置
|
5. 如需则更新 sidebar.ts
|
||||||
|
|
||||||
### 修改主题
|
|
||||||
1. 编辑 `src/.vuepress/theme.ts`
|
|
||||||
2. 查阅 VuePress Theme Hope 文档
|
|
||||||
3. 在开发模式下测试更改
|
|
||||||
4. 验证生产构建
|
|
||||||
|
|
||||||
### 添加自定义组件
|
### 添加自定义组件
|
||||||
1. 在 `src/.vuepress/components/` 中创建 Vue 组件
|
1. 在 `src/.vuepress/components/` 创建
|
||||||
2. 如果需要,在配置中注册
|
2. 如需则在配置中注册
|
||||||
3. 在 Markdown 或其他组件中导入并使用
|
3. 在 Markdown/组件中导入使用
|
||||||
4. 在开发中测试
|
4. 在开发模式测试
|
||||||
|
|
||||||
### 更新导航
|
|
||||||
1. 编辑 `src/.vuepress/navbar.ts`
|
|
||||||
2. 遵循现有结构
|
|
||||||
3. 测试导航功能
|
|
||||||
4. 验证移动端响应性
|
|
||||||
|
|
||||||
## 故障排除
|
## 故障排除
|
||||||
|
|
||||||
### 常见问题
|
- **构建失败**: 检查 TypeScript 错误、缺失依赖
|
||||||
- **构建失败**: 检查 TypeScript 错误、缺失的依赖
|
- **开发服务器失败**: 尝试 `npm run docs:clean-dev`
|
||||||
- **开发服务器无法启动**: 尝试 `npm run docs:clean-dev`
|
- **图片无法加载**: 验证 `public/` 目录路径
|
||||||
- **图片无法加载**: 验证 `public/` 目录中的路径
|
- **样式未应用**: 检查 SCSS 编译顺序
|
||||||
- **样式未应用**: 检查 SCSS 编译、导入顺序
|
|
||||||
|
|
||||||
### 调试
|
## 部署
|
||||||
1. 检查浏览器控制台中的错误
|
|
||||||
2. 验证终端中的 VuePress 日志
|
- **输出目录**: `src/.vuepress/dist/`
|
||||||
3. 在开发者工具中检查生成的 HTML
|
- **托管**: 兼容静态托管
|
||||||
4. 如果需要,使用干净缓存测试
|
- **基础路径**: 如需则在 `config.ts` 中配置
|
||||||
|
|
||||||
|
## 注意事项
|
||||||
|
|
||||||
|
- 未配置单元测试(仅构建验证)
|
||||||
|
- 主要语言:中文(zh-CN)
|
||||||
|
- 主题:VuePress Theme Hope 自定义
|
||||||
|
- 图标:FontAwesome 6(`fa6-solid:` 前缀)
|
||||||
|
|||||||
270
src/programming/backend/java/功能整理/SDKMAN-Java-Maven版本管理.md
Normal file
270
src/programming/backend/java/功能整理/SDKMAN-Java-Maven版本管理.md
Normal file
@@ -0,0 +1,270 @@
|
|||||||
|
---
|
||||||
|
title: 使用 SDKMAN 管理 Java 和 Maven 多版本
|
||||||
|
icon: mdi:package-variant
|
||||||
|
date: 2026-02-04
|
||||||
|
category:
|
||||||
|
- 实用工具
|
||||||
|
- JAVA
|
||||||
|
tag:
|
||||||
|
- SDKMAN
|
||||||
|
- Java
|
||||||
|
- Maven
|
||||||
|
- 版本管理
|
||||||
|
---
|
||||||
|
|
||||||
|
# 使用 SDKMAN 管理 Java 和 Maven 多版本方案
|
||||||
|
|
||||||
|
在开发过程中,我们经常需要在不同的项目之间切换不同的 Java 和 Maven 版本。SDKMAN (Software Development Kit Manager) 是一个强大的工具,可以帮助我们轻松管理多个版本的软件开发工具包。
|
||||||
|
|
||||||
|
<!-- more -->
|
||||||
|
|
||||||
|
## 概述
|
||||||
|
|
||||||
|
在开发过程中,我们经常需要在不同的项目之间切换不同的 Java 和 Maven 版本。SDKMAN (Software Development Kit Manager) 是一个强大的工具,可以帮助我们轻松管理多个版本的软件开发工具包。
|
||||||
|
|
||||||
|
## 当前系统环境
|
||||||
|
|
||||||
|
- **操作系统**: Linux
|
||||||
|
- **当前 Java 版本**: OpenJDK 1.8.0_472 (Java 8)
|
||||||
|
- **当前 Maven 版本**: Apache Maven 3.8.7
|
||||||
|
- **SDKMAN 状态**: 需要安装
|
||||||
|
|
||||||
|
## 安装 SDKMAN
|
||||||
|
|
||||||
|
### 1. 下载并安装 SDKMAN
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl -s "https://get.sdkman.io" | bash
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. 初始化 SDKMAN
|
||||||
|
|
||||||
|
```bash
|
||||||
|
source "$HOME/.sdkman/bin/sdkman-init.sh"
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3. 验证安装
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sdk version
|
||||||
|
```
|
||||||
|
|
||||||
|
## 管理 Java 版本
|
||||||
|
|
||||||
|
### 1. 查看可用的 Java 版本
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sdk list java
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. 安装特定版本的 Java
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 安装 Java 11
|
||||||
|
sdk install java 11.0.21-tem
|
||||||
|
|
||||||
|
# 安装 Java 17 (LTS)
|
||||||
|
sdk install java 17.0.9-tem
|
||||||
|
|
||||||
|
# 安装 Java 21 (最新 LTS)
|
||||||
|
sdk install java 21.0.1-tem
|
||||||
|
|
||||||
|
# 安装 OpenJDK 版本
|
||||||
|
sdk install java 8.0.382-tem
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3. 切换 Java 版本
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 临时切换到 Java 11
|
||||||
|
sdk use java 11.0.21-tem
|
||||||
|
|
||||||
|
# 临时切换到 Java 17
|
||||||
|
sdk use java 17.0.9-tem
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4. 设置默认 Java 版本
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sdk default java 17.0.9-tem
|
||||||
|
```
|
||||||
|
|
||||||
|
### 5. 查看当前使用的 Java 版本
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sdk current java
|
||||||
|
java -version
|
||||||
|
```
|
||||||
|
|
||||||
|
## 管理 Maven 版本
|
||||||
|
|
||||||
|
### 1. 查看可用的 Maven 版本
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sdk list maven
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. 安装特定版本的 Maven
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 安装 Maven 3.8.x
|
||||||
|
sdk install maven 3.8.8
|
||||||
|
|
||||||
|
# 安装 Maven 3.9.x
|
||||||
|
sdk install maven 3.9.6
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3. 切换 Maven 版本
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sdk use maven 3.9.6
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4. 设置默认 Maven 版本
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sdk default maven 3.9.6
|
||||||
|
```
|
||||||
|
|
||||||
|
### 5. 查看当前使用的 Maven 版本
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sdk current maven
|
||||||
|
mvn -version
|
||||||
|
```
|
||||||
|
|
||||||
|
## 项目级版本管理
|
||||||
|
|
||||||
|
SDKMAN 支持项目级别的版本管理,通过 `.sdkmanrc` 文件可以实现进入项目目录时自动切换到指定版本。
|
||||||
|
|
||||||
|
### 1. 创建项目版本配置文件
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 在项目根目录创建 .sdkmanrc 文件
|
||||||
|
cat > .sdkmanrc << EOF
|
||||||
|
java=17.0.9-tem
|
||||||
|
maven=3.9.6
|
||||||
|
EOF
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. 启用项目版本环境
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 进入项目目录
|
||||||
|
cd your-project
|
||||||
|
|
||||||
|
# 激活项目配置的版本
|
||||||
|
sdk env
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3. 自动切换(可选)
|
||||||
|
|
||||||
|
SDKMAN 可以配置为在进入包含 `.sdkmanrc` 文件的目录时自动切换版本。
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 启用自动切换
|
||||||
|
sdk enable auto_env
|
||||||
|
```
|
||||||
|
|
||||||
|
## 常用 SDKMAN 命令
|
||||||
|
|
||||||
|
### 1. 查看所有已安装的版本
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sdk list installed
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. 查看特定工具的所有版本
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sdk list java
|
||||||
|
sdk list maven
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3. 卸载不需要的版本
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 卸载 Java 11
|
||||||
|
sdk uninstall java 11.0.21-tem
|
||||||
|
|
||||||
|
# 卸载 Maven 3.8.8
|
||||||
|
sdk uninstall maven 3.8.8
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4. 更新 SDKMAN
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sdk selfupdate
|
||||||
|
```
|
||||||
|
|
||||||
|
### 5. 查看帮助
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sdk help
|
||||||
|
```
|
||||||
|
|
||||||
|
## 实际使用场景示例
|
||||||
|
|
||||||
|
### 场景 1:新项目使用 Java 17 + Maven 3.9
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd new-project
|
||||||
|
sdk use java 17.0.9-tem
|
||||||
|
sdk use maven 3.9.6
|
||||||
|
echo "java=17.0.9-tem" > .sdkmanrc
|
||||||
|
echo "maven=3.9.6" >> .sdkmanrc
|
||||||
|
```
|
||||||
|
|
||||||
|
### 场景 2:维护旧项目使用 Java 8 + Maven 3.8
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd legacy-project
|
||||||
|
sdk use java 8.0.382-tem
|
||||||
|
sdk use maven 3.8.8
|
||||||
|
echo "java=8.0.382-tem" > .sdkmanrc
|
||||||
|
echo "maven=3.8.8" >> .sdkmanrc
|
||||||
|
```
|
||||||
|
|
||||||
|
### 场景 3:升级项目 Java 版本
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd project-to-upgrade
|
||||||
|
# 从 Java 8 升级到 Java 17
|
||||||
|
sdk install java 17.0.9-tem
|
||||||
|
sdk use java 17.0.9-tem
|
||||||
|
# 更新 .sdkmanrc 文件
|
||||||
|
sed -i 's/java=.*/java=17.0.9-tem/' .sdkmanrc
|
||||||
|
```
|
||||||
|
|
||||||
|
## 最佳实践建议
|
||||||
|
|
||||||
|
1. **保持系统 Java 版本最低**: 系统级别的 Java 保持为较低版本(如 Java 8),其他版本通过 SDKMAN 管理。
|
||||||
|
|
||||||
|
2. **项目配置版本控制**: 将 `.sdkmanrc` 文件提交到版本控制系统,确保团队成员使用一致的开发环境。
|
||||||
|
|
||||||
|
3. **定期清理不需要的版本**: 定期使用 `sdk list installed` 查看已安装版本,卸载不再使用的版本以节省磁盘空间。
|
||||||
|
|
||||||
|
4. **文档化版本要求**: 在项目 README 文件中明确说明所需的 Java 和 Maven 版本。
|
||||||
|
|
||||||
|
5. **测试环境一致性**: 开发、测试、生产环境尽量保持相同的版本配置。
|
||||||
|
|
||||||
|
## 环境变量配置
|
||||||
|
|
||||||
|
如果需要永久配置环境变量,可以在 `~/.bashrc` 或 `~/.zshrc` 中添加:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# SDKMAN 初始化
|
||||||
|
export SDKMAN_DIR="$HOME/.sdkman"
|
||||||
|
[[ -s "$SDKMAN_DIR/bin/sdkman-init.sh" ]] && source "$SDKMAN_DIR/bin/sdkman-init.sh"
|
||||||
|
```
|
||||||
|
|
||||||
|
## 总结
|
||||||
|
|
||||||
|
SDKMAN 提供了一个优雅的解决方案来管理 Java 和 Maven 的多版本问题。通过合理使用 SDKMAN,我们可以:
|
||||||
|
|
||||||
|
- 轻松在不同项目间切换版本
|
||||||
|
- 避免版本冲突问题
|
||||||
|
- 简化团队成员的环境配置
|
||||||
|
- 提高开发效率和项目维护性
|
||||||
|
|
||||||
|
建议所有需要处理多版本 Java 项目的开发者都使用 SDKMAN 进行版本管理。
|
||||||
405
src/programming/backend/java/功能整理/Windows-Jabba-Java版本管理.md
Normal file
405
src/programming/backend/java/功能整理/Windows-Jabba-Java版本管理.md
Normal file
@@ -0,0 +1,405 @@
|
|||||||
|
---
|
||||||
|
title: Windows 多版本 Java 环境管理(Jabba)
|
||||||
|
icon: mdi:language-java
|
||||||
|
date: 2026-02-04
|
||||||
|
category:
|
||||||
|
- 实用工具
|
||||||
|
- JAVA
|
||||||
|
tag:
|
||||||
|
- Jabba
|
||||||
|
- Java
|
||||||
|
- Windows
|
||||||
|
- 版本管理
|
||||||
|
- PowerShell
|
||||||
|
---
|
||||||
|
|
||||||
|
# Windows 多版本 Java 环境管理(Jabba)
|
||||||
|
|
||||||
|
在 Windows 10 + PowerShell 环境下使用 Jabba 实现多版本 JDK 管理的完整指南。
|
||||||
|
|
||||||
|
<!-- more -->
|
||||||
|
|
||||||
|
## 1. 环境及目录约定
|
||||||
|
|
||||||
|
- **操作系统**: Windows 10
|
||||||
|
- **Shell**: PowerShell
|
||||||
|
- **Jabba 安装目录**(手动方式):
|
||||||
|
- 二进制: `C:\Users\<用户名>\.jabba\bin\jabba.exe`
|
||||||
|
- 脚本: `C:\Users\<用户名>\.jabba\jabba.ps1`
|
||||||
|
- **本项目目录**(当前目录):
|
||||||
|
- `C:\Users\<用户名>\Desktop\cursor\JAVA 版本管理`
|
||||||
|
- 内含辅助脚本,例如 `use-java.ps1`、本说明文件 `JAVA_ENV_SETUP.md`。
|
||||||
|
|
||||||
|
> 下文中的 `<用户名>` 对应你本机的 Windows 用户名,例如 `a3621`。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2. Jabba 手动安装与集成
|
||||||
|
|
||||||
|
### 2.1 放置 Jabba 可执行文件
|
||||||
|
|
||||||
|
1. 使用浏览器下载 Jabba Windows 版本(例如 `jabba-0.14.0-windows-amd64.exe`)。
|
||||||
|
2. 在资源管理器中创建目录:
|
||||||
|
- `C:\Users\<用户名>\.jabba\bin\`
|
||||||
|
3. 将下载的 EXE 重命名为:
|
||||||
|
- `jabba.exe`
|
||||||
|
4. 移动到:
|
||||||
|
- `C:\Users\<用户名>\.jabba\bin\jabba.exe`
|
||||||
|
|
||||||
|
### 2.2 创建 `jabba.ps1` 包装脚本
|
||||||
|
|
||||||
|
1. 打开 PowerShell,执行:
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
notepad "$env:USERPROFILE\.jabba\jabba.ps1"
|
||||||
|
```
|
||||||
|
|
||||||
|
2. 在文件中填入如下内容(如已存在可覆盖):
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
$env:JABBA_HOME="$env:USERPROFILE\.jabba"
|
||||||
|
|
||||||
|
function jabba
|
||||||
|
{
|
||||||
|
$fd3=$([System.IO.Path]::GetTempFileName())
|
||||||
|
$command="& '$env:JABBA_HOME\bin\jabba.exe' $args --fd3 `"$fd3`""
|
||||||
|
& { $env:JABBA_SHELL_INTEGRATION="ON"; Invoke-Expression $command }
|
||||||
|
$fd3content=$(Get-Content $fd3)
|
||||||
|
if ($fd3content) {
|
||||||
|
$expression=$fd3content.replace("export ","`$env:").replace("unset ","Remove-Item env:") -join "`n"
|
||||||
|
if (-not $expression -eq "") { Invoke-Expression $expression }
|
||||||
|
}
|
||||||
|
Remove-Item -Force $fd3
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
3. 保存并关闭记事本。
|
||||||
|
|
||||||
|
### 2.3 在 PowerShell Profile 中自动加载 Jabba
|
||||||
|
|
||||||
|
1. 打开 PowerShell Profile:
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
notepad $PROFILE
|
||||||
|
```
|
||||||
|
|
||||||
|
2. 在文件末尾追加(若已有同类行则无需重复):
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
if (Test-Path "$env:USERPROFILE\.jabba\jabba.ps1") { . "$env:USERPROFILE\.jabba\jabba.ps1" }
|
||||||
|
```
|
||||||
|
|
||||||
|
3. 保存,关闭 PowerShell 窗口,重新打开一个新的 PowerShell。
|
||||||
|
|
||||||
|
4. 验证:
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
jabba --version
|
||||||
|
```
|
||||||
|
|
||||||
|
若能输出版本号(例如 `0.14.0`),说明 Jabba 配置成功。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 3. 使用 Jabba 管理多版本 JDK
|
||||||
|
|
||||||
|
### 3.1 查看可用 JDK 版本
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
jabba ls-remote
|
||||||
|
jabba ls-remote temurin
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3.2 安装常用 LTS 版本(示例: 8 / 11 / 17)
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
jabba install temurin@17
|
||||||
|
jabba install temurin@11
|
||||||
|
jabba install temurin@8
|
||||||
|
```
|
||||||
|
|
||||||
|
安装完成后查看本机已安装的 JDK 列表:
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
jabba ls
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3.3 在当前终端会话切换 JDK 版本
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
jabba use temurin@17
|
||||||
|
java -version
|
||||||
|
```
|
||||||
|
|
||||||
|
`java -version` 应显示对应版本(例如 `openjdk version "17.x.y"`)。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 4. 配置"全局默认" JDK 版本
|
||||||
|
|
||||||
|
若希望每次打开 PowerShell 都默认使用某个版本(例如 17),可在 Profile 中配置:
|
||||||
|
|
||||||
|
1. 在任意 PowerShell 会话中确认要用的版本,例如:
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
jabba use temurin@17
|
||||||
|
```
|
||||||
|
|
||||||
|
2. 打开 Profile:
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
notepad $PROFILE
|
||||||
|
```
|
||||||
|
|
||||||
|
3. 在末尾追加:
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
jabba use temurin@17
|
||||||
|
```
|
||||||
|
|
||||||
|
4. 保存并重启 PowerShell,验证:
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
java -version
|
||||||
|
```
|
||||||
|
|
||||||
|
此时新开终端应默认是 JDK 17。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 5. 项目级 Java 版本管理(`.jabbarc` + `use-java.ps1`)
|
||||||
|
|
||||||
|
### 5.1 `.jabbarc` 约定
|
||||||
|
|
||||||
|
在每个 Java 项目根目录创建 `.jabbarc` 文件,内容为希望使用的 Jabba 版本,例如:
|
||||||
|
|
||||||
|
```text
|
||||||
|
temurin@17
|
||||||
|
```
|
||||||
|
|
||||||
|
老项目如需 Java 8:
|
||||||
|
|
||||||
|
```text
|
||||||
|
temurin@8
|
||||||
|
```
|
||||||
|
|
||||||
|
> 规则: `.jabbarc` 第一行非空内容即为要使用的版本字符串,与 `jabba ls` 中的名称一致。
|
||||||
|
|
||||||
|
### 5.2 通用脚本 `use-java.ps1`
|
||||||
|
|
||||||
|
在当前目录 `JAVA 版本管理` 下建议放一个通用脚本 `use-java.ps1`,典型实现如下:
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
param(
|
||||||
|
[string]$ProjectPath = "."
|
||||||
|
)
|
||||||
|
|
||||||
|
$fullPath = (Resolve-Path $ProjectPath).Path
|
||||||
|
$jabbarc = Join-Path $fullPath ".jabbarc"
|
||||||
|
|
||||||
|
if (!(Test-Path $jabbarc)) {
|
||||||
|
Write-Host "未找到 .jabbarc 文件:$jabbarc"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
$version = (Get-Content $jabbarc | Where-Object { $_ -ne "" } | Select-Object -First 1).Trim()
|
||||||
|
|
||||||
|
if (-not $version) {
|
||||||
|
Write-Host ".jabbarc 里没有有效版本号"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
Write-Host "切换到 JDK 版本:$version"
|
||||||
|
jabba use $version
|
||||||
|
|
||||||
|
Write-Host "当前 java 版本:"
|
||||||
|
java -version
|
||||||
|
```
|
||||||
|
|
||||||
|
> 实际脚本内容可根据需要微调,只要遵循"读取 `.jabbarc` → 调用 `jabba use`"的逻辑即可。
|
||||||
|
|
||||||
|
### 5.3 使用方式示例
|
||||||
|
|
||||||
|
假设有项目 `D:\Projects\MyApp`,根目录已放置 `.jabbarc`:
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
cd "D:\Projects\MyApp"
|
||||||
|
|
||||||
|
# 从当前目录调用公共脚本(路径根据实际情况调整)
|
||||||
|
powershell -ExecutionPolicy Bypass -File "C:\Users\<用户名>\Desktop\cursor\JAVA 版本管理\use-java.ps1" .
|
||||||
|
```
|
||||||
|
|
||||||
|
执行后,当前终端的 `JAVA_HOME` 和 `PATH` 将切换到 `.jabbarc` 指定的 JDK,随后在该终端内运行的 `java` / `javac` / `mvn` / `gradlew` 都会使用这个版本。
|
||||||
|
|
||||||
|
### 5.4 进阶:cd 自动检测 `.jabbarc`(类似 direnv)
|
||||||
|
|
||||||
|
若希望**一进入带 `.jabbarc` 的目录就自动切换 JDK**,无需再手动执行 `use-java.ps1`,可在 PowerShell Profile 中增加下面逻辑。
|
||||||
|
|
||||||
|
**行为说明:**
|
||||||
|
|
||||||
|
- 每次执行 `cd`(或 `Set-Location`)后,从当前目录向上逐级查找 `.jabbarc`。
|
||||||
|
- 找到则读取其中版本并执行 `jabba use <版本>`,当前终端即使用该 JDK。
|
||||||
|
- 若当前路径及所有父目录都没有 `.jabbarc`,不修改 JDK(保持上一次的版本)。
|
||||||
|
|
||||||
|
**实现步骤:**
|
||||||
|
|
||||||
|
1. 打开 Profile:
|
||||||
|
```powershell
|
||||||
|
notepad $PROFILE
|
||||||
|
```
|
||||||
|
2. 在**已加载 Jabba 的语句之后**(例如在 `jabba use temurin@17` 之后),追加下面整段代码并保存:
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
# ----- 自动根据 .jabbarc 切换 JDK(direnv 风格) -----
|
||||||
|
function Invoke-JabbaAutoUse {
|
||||||
|
$current = Get-Location
|
||||||
|
while ($current -and $current.Path) {
|
||||||
|
$jabbarc = Join-Path $current.Path ".jabbarc"
|
||||||
|
if (Test-Path -LiteralPath $jabbarc -PathType Leaf) {
|
||||||
|
$version = (Get-Content -LiteralPath $jabbarc -Raw -ErrorAction SilentlyContinue).Trim()
|
||||||
|
$version = ($version -split "`n" | ForEach-Object { $_.Trim() } | Where-Object { $_ -ne "" } | Select-Object -First 1)
|
||||||
|
if ($version) {
|
||||||
|
jabba use $version 2>$null
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
$parent = Split-Path $current.Path -Parent
|
||||||
|
if (-not $parent -or $parent -eq $current.Path) { break }
|
||||||
|
$current = Get-Item -LiteralPath $parent -ErrorAction SilentlyContinue
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# 用包装函数替代内置 cd,使每次切换目录后自动检测 .jabbarc
|
||||||
|
function Set-LocationWithJabba {
|
||||||
|
[CmdletBinding(DefaultParameterSetName = "Path")]
|
||||||
|
param(
|
||||||
|
[Parameter(ParameterSetName = "Path", Position = 0)]
|
||||||
|
[string]$Path,
|
||||||
|
[Parameter(ParameterSetName = "LiteralPath")]
|
||||||
|
[string]$LiteralPath,
|
||||||
|
[switch]$PassThru
|
||||||
|
)
|
||||||
|
if ($PSCmdlet.ParameterSetName -eq "LiteralPath" -and $LiteralPath) {
|
||||||
|
Set-Location -LiteralPath $LiteralPath
|
||||||
|
} elseif ($Path) {
|
||||||
|
Set-Location -Path $Path
|
||||||
|
} else {
|
||||||
|
Set-Location $env:USERPROFILE
|
||||||
|
}
|
||||||
|
if ($PassThru) { Get-Location }
|
||||||
|
Invoke-JabbaAutoUse
|
||||||
|
}
|
||||||
|
Set-Alias -Name cd -Value Set-LocationWithJabba -Force -Option AllScope
|
||||||
|
# ----- 以上为自动 .jabbarc 检测 -----
|
||||||
|
```
|
||||||
|
|
||||||
|
3. 关闭并重新打开 PowerShell,使 Profile 生效。
|
||||||
|
|
||||||
|
**使用方式:**
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
cd D:\Projects\MyApp # 若 MyApp 或其父目录有 .jabbarc,会自动 jabba use
|
||||||
|
java -version # 已是 .jabbarc 中指定的版本
|
||||||
|
```
|
||||||
|
|
||||||
|
**注意:**
|
||||||
|
|
||||||
|
- 仅对**当前会话**中通过 `cd` 的切换生效;新开终端仍会先应用 Profile 里的默认 `jabba use`,再在第一次 `cd` 到带 `.jabbarc` 的目录时自动切换。
|
||||||
|
- 若使用 `Set-Location`(或 `sl`)切换目录,不会触发自动检测;可在切换后手动执行 `Invoke-JabbaAutoUse` 或 `use-java.ps1`。
|
||||||
|
- 若不需要自动检测,可删除 Profile 中上述整段"自动 .jabbarc 检测"代码,继续使用手动执行 `use-java.ps1` 的方式。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 6. Maven / Gradle 与 JDK 版本
|
||||||
|
|
||||||
|
### 6.1 Maven
|
||||||
|
|
||||||
|
在执行 Maven 命令前,通过 Jabba 或 `use-java.ps1` 先切好版本:
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
jabba use temurin@17 # 或 use-java.ps1 ...
|
||||||
|
mvn -version # 确认使用的 JAVA_HOME
|
||||||
|
mvn clean package
|
||||||
|
```
|
||||||
|
|
||||||
|
- Maven 默认读取当前会话的 `JAVA_HOME` / `PATH`,无需额外配置。
|
||||||
|
|
||||||
|
### 6.2 Gradle / Gradle Wrapper
|
||||||
|
|
||||||
|
同样原则,先设置好 JDK:
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
jabba use temurin@11
|
||||||
|
.\gradlew -version
|
||||||
|
.\gradlew build
|
||||||
|
```
|
||||||
|
|
||||||
|
如需强制某项目永远使用固定 JDK,可在该项目 `gradle.properties` 中加入:
|
||||||
|
|
||||||
|
```properties
|
||||||
|
org.gradle.java.home=C:/Users/<用户名>/.jabba/jdk/temurin@17.0.10
|
||||||
|
```
|
||||||
|
|
||||||
|
> 注意路径需要与 `jabba ls` 列出的真实 JDK 目录一致。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 7. IDE 中使用 Jabba 管理的 JDK
|
||||||
|
|
||||||
|
### 7.1 IntelliJ IDEA
|
||||||
|
|
||||||
|
1. 打开 `File -> Project Structure -> SDKs`。
|
||||||
|
2. 点击 `+` 添加 JDK,路径指向 Jabba 安装的 JDK,例如:
|
||||||
|
- `C:\Users\<用户名>\.jabba\jdk\temurin@17.0.10`
|
||||||
|
3. 在 `Project` 中为每个项目选择对应 SDK(JDK 8 / 11 / 17 等)。
|
||||||
|
4. 在 IDEA 内置 Terminal 中使用 PowerShell,可继承前述 Jabba 环境。
|
||||||
|
|
||||||
|
### 7.2 Eclipse
|
||||||
|
|
||||||
|
1. 打开 `Window -> Preferences -> Java -> Installed JREs`。
|
||||||
|
2. 添加 JRE,路径为 Jabba 的 JDK 目录,例如:
|
||||||
|
- `C:\Users\<用户名>\.jabba\jdk\temurin@11.0.x`
|
||||||
|
3. 在工作空间或项目属性中为不同项目选择不同 JRE。
|
||||||
|
|
||||||
|
### 7.3 VS Code(Java 扩展)
|
||||||
|
|
||||||
|
在对应工程的 `settings.json` 中配置:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"java.jdt.ls.java.home": "C:/Users/<用户名>/.jabba/jdk/temurin@17.0.10"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
不同 Workspace 可指向不同 JDK,实现按项目区分。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 8. 备份与迁移建议
|
||||||
|
|
||||||
|
为方便重装系统或迁移到新电脑,建议备份以下内容:
|
||||||
|
|
||||||
|
- PowerShell Profile:
|
||||||
|
- `$PROFILE` 对应的文件(路径可通过 `echo $PROFILE` 查看)。
|
||||||
|
- Jabba 相关:
|
||||||
|
- `C:\Users\<用户名>\.jabba\bin\jabba.exe`
|
||||||
|
- `C:\Users\<用户名>\.jabba\jabba.ps1`
|
||||||
|
- 本目录下配置:
|
||||||
|
- `JAVA_ENV_SETUP.md`(本说明文件)
|
||||||
|
- `use-java.ps1`(项目级切换脚本)
|
||||||
|
- 各个项目中的 `.jabbarc` 文件(记录各项目所需的 JDK 版本)。
|
||||||
|
|
||||||
|
迁移步骤简化为:
|
||||||
|
|
||||||
|
1. 将上述文件拷贝到新机器相同位置。
|
||||||
|
2. 打开 PowerShell,确认 Profile 中有 Jabba 加载语句。
|
||||||
|
3. 重新打开 PowerShell,执行 `jabba --version` 验证。
|
||||||
|
4. 根据需要使用 `jabba install` 重新拉取各版本 JDK(或同时备份 `.jabba\jdk` 目录)。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
通过上述配置,你即可在 Windows 10 上实现:
|
||||||
|
|
||||||
|
- 全局默认 JDK 版本(通过 Profile 中的 `jabba use`)。
|
||||||
|
- 项目级 JDK 版本(通过 `.jabbarc` + `use-java.ps1`)。
|
||||||
|
- 构建工具与 IDE 均能根据当前环境/配置选择合适的 JDK。
|
||||||
328
src/programming/frontend/Cursor-WSL开发指南.md
Normal file
328
src/programming/frontend/Cursor-WSL开发指南.md
Normal file
@@ -0,0 +1,328 @@
|
|||||||
|
---
|
||||||
|
title: Cursor 连接 WSL 开发指南
|
||||||
|
icon: mdi:microsoft-windows
|
||||||
|
date: 2026-02-04
|
||||||
|
category:
|
||||||
|
- 开发工具
|
||||||
|
- 前端
|
||||||
|
tag:
|
||||||
|
- Cursor
|
||||||
|
- WSL
|
||||||
|
- Windows
|
||||||
|
- 开发环境
|
||||||
|
---
|
||||||
|
|
||||||
|
# Cursor 连接 WSL 开发指南
|
||||||
|
|
||||||
|
本指南包含 Windows 系统选择、WSL2 概念解释以及 Cursor 连接 WSL 开发的完整教程。
|
||||||
|
|
||||||
|
<!-- more -->
|
||||||
|
|
||||||
|
## 前言
|
||||||
|
|
||||||
|
本指南整理自与 Cursor AI 的对话,包含 Windows 系统选择、WSL2 概念解释以及 Cursor 连接 WSL 开发的完整教程。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 一、Windows 10 vs Windows 11 Pro 稳定性对比
|
||||||
|
|
||||||
|
### 1.1 结论
|
||||||
|
|
||||||
|
**Windows 10 最新版本(23H2)通常比 Windows 11 更稳定。**
|
||||||
|
|
||||||
|
### 1.2 原因分析
|
||||||
|
|
||||||
|
| 特性 | Windows 10 | Windows 11 |
|
||||||
|
|------|------------|------------|
|
||||||
|
| 成熟度 | 经过多年优化,成熟稳定 | 相对较新,部分功能仍在完善 |
|
||||||
|
| 兼容性 | 对老旧硬件和软件支持更好 | 要求 TPM 2.0,部分老硬件不兼容 |
|
||||||
|
| 更新策略 | 主要是维护性更新,变化小 | 持续有新功能更新,变化较多 |
|
||||||
|
| 驱动支持 | 驱动程序支持更广泛 | 部分老驱动可能不兼容 |
|
||||||
|
|
||||||
|
### 1.3 推荐选择
|
||||||
|
|
||||||
|
- **专业软件开发/企业环境**:推荐 Windows 10 Pro
|
||||||
|
- **新硬件/追求新功能**:可以选择 Windows 11 Pro
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 二、Java/Go/Vue 开发系统推荐
|
||||||
|
|
||||||
|
### 2.1 推荐:Windows 11 专业版
|
||||||
|
|
||||||
|
对于 Java、Go、Vue 开发,**强烈推荐 Windows 11 专业版**。
|
||||||
|
|
||||||
|
### 2.2 优势说明
|
||||||
|
|
||||||
|
1. **WSL2 性能优化**
|
||||||
|
- 启动速度快(几秒 vs 几十秒)
|
||||||
|
- 资源占用少
|
||||||
|
- 与 Windows 集成度高
|
||||||
|
|
||||||
|
2. **Docker Desktop 支持更好**
|
||||||
|
- 容器运行更稳定
|
||||||
|
- 资源管理更高效
|
||||||
|
|
||||||
|
3. **Windows Terminal 原生支持**
|
||||||
|
- 开发体验更流畅
|
||||||
|
- 多标签页管理方便
|
||||||
|
|
||||||
|
### 2.3 各技术栈支持情况
|
||||||
|
|
||||||
|
| 技术栈 | Windows 10 | Windows 11 | 说明 |
|
||||||
|
|--------|------------|------------|------|
|
||||||
|
| Java | ✅ 良好 | ✅ 良好 | 两者完美支持 |
|
||||||
|
| Go | ✅ 良好 | ✅ 良好 | 跨平台编译 |
|
||||||
|
| Vue | ✅ 可用 | ✅ 优秀 | WSL2 下开发体验极佳 |
|
||||||
|
| Docker | ✅ 可用 | ✅ 优秀 | WSL2 集成更好 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 三、WSL2 详解
|
||||||
|
|
||||||
|
### 3.1 WSL2 是什么
|
||||||
|
|
||||||
|
**WSL2 = Windows Subsystem for Linux 2**
|
||||||
|
|
||||||
|
即 Windows 上的 Linux 子系统,让 Windows 用户无需安装虚拟机或双系统,直接运行 Linux 环境。
|
||||||
|
|
||||||
|
### 3.2 WSL2 vs 虚拟机对比
|
||||||
|
|
||||||
|
| 特性 | WSL2 | 虚拟机 |
|
||||||
|
|------|------|--------|
|
||||||
|
| 启动速度 | 几秒 | 几十秒 |
|
||||||
|
| 资源占用 | 少 | 多 |
|
||||||
|
| 集成度 | 与 Windows 无缝集成 | 独立运行 |
|
||||||
|
| 性能 | 接近原生 Linux | 有一定损耗 |
|
||||||
|
|
||||||
|
### 3.3 WSL2 核心特性
|
||||||
|
|
||||||
|
- **独立文件系统**:拥有自己的 Linux 目录结构
|
||||||
|
- **独立用户系统**:有独立的用户和权限管理
|
||||||
|
- **独立包管理**:使用 apt、yum 等 Linux 包管理器
|
||||||
|
- **资源共享**:与 Windows 共享 CPU、内存、网络
|
||||||
|
|
||||||
|
### 3.4 文件系统访问
|
||||||
|
|
||||||
|
```
|
||||||
|
Windows 目录 WSL2 访问位置
|
||||||
|
─────────────────────────────────────
|
||||||
|
C:\myproject → /mnt/c/myproject
|
||||||
|
|
||||||
|
WSL2 目录 Windows 访问位置
|
||||||
|
─────────────────────────────────────
|
||||||
|
~/myproject → \\wsl$\Ubuntu\home\user\myproject
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 四、Cursor 连接 WSL 开发教程
|
||||||
|
|
||||||
|
### 4.1 原理说明
|
||||||
|
|
||||||
|
Cursor 采用 **Server-Client 架构** 连接 WSL:
|
||||||
|
|
||||||
|
```
|
||||||
|
┌─────────────────────────────────────────────────────────┐
|
||||||
|
│ Windows 端 │
|
||||||
|
│ ┌─────────────┐ ┌─────────────┐ │
|
||||||
|
│ │ Cursor GUI │◄────►│ WSL 插件 │ │
|
||||||
|
│ │ (前端界面) │ │ (Server) │ │
|
||||||
|
│ └─────────────┘ └──────┬──────┘ │
|
||||||
|
└──────────────────────────────┼───────────────────────────┘
|
||||||
|
│ SSH/IPC 通信
|
||||||
|
▼
|
||||||
|
┌─────────────────────────────────────────────────────────┐
|
||||||
|
│ WSL 端 │
|
||||||
|
│ ┌─────────────────────┐ │
|
||||||
|
│ │ VS Code Server │ │
|
||||||
|
│ │ (后端服务) │ │
|
||||||
|
│ └─────────────────────┘ │
|
||||||
|
│ │ │ │
|
||||||
|
│ 文件系统 │ │ 终端/调试 │
|
||||||
|
│ ▼ ▼ │
|
||||||
|
│ ┌─────────────────────┐ │
|
||||||
|
│ │ Linux 环境 │ │
|
||||||
|
│ │ (Java/Node/Go 等) │ │
|
||||||
|
│ └─────────────────────┘ │
|
||||||
|
└─────────────────────────────────────────────────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4.2 操作步骤
|
||||||
|
|
||||||
|
#### 步骤 1:安装 WSL 扩展
|
||||||
|
|
||||||
|
1. 打开 Cursor
|
||||||
|
2. 按 `Ctrl + Shift + X` 打开扩展面板
|
||||||
|
3. 搜索 "WSL"
|
||||||
|
4. 安装 **"WSL"** 插件(Microsoft 官方)
|
||||||
|
|
||||||
|
#### 步骤 2:进入 WSL 并打开项目
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 1. 打开 Cursor 终端 (Ctrl + `)
|
||||||
|
# 2. 进入 WSL 项目目录
|
||||||
|
|
||||||
|
cd ~/你的项目路径
|
||||||
|
# 或访问 Windows 项目
|
||||||
|
cd /mnt/c/Windows 上的项目路径
|
||||||
|
|
||||||
|
# 3. 在 Cursor 中打开
|
||||||
|
code .
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 步骤 3:确认 WSL 模式
|
||||||
|
|
||||||
|
连接成功后,Cursor 左下角会显示:
|
||||||
|
- "WSL: Ubuntu" 或你安装的发行版名称
|
||||||
|
- 终端默认是 Linux bash 环境
|
||||||
|
- 使用 Linux 版本的开发工具
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 五、Cursor SSH 连接远程 Linux 服务器
|
||||||
|
|
||||||
|
### 5.1 原理图解
|
||||||
|
|
||||||
|
```
|
||||||
|
Cursor (Windows)
|
||||||
|
│
|
||||||
|
│ Remote - SSH 插件
|
||||||
|
▼
|
||||||
|
┌─────────────────┐
|
||||||
|
│ SSH 连接到服务器 │
|
||||||
|
│ user@192.168.x │
|
||||||
|
└────────┬────────┘
|
||||||
|
│
|
||||||
|
▼
|
||||||
|
┌─────────────────┐
|
||||||
|
│ 服务器上的 │
|
||||||
|
│ VS Code Server │
|
||||||
|
└────────┬────────┘
|
||||||
|
│
|
||||||
|
│ 远程开发
|
||||||
|
▼
|
||||||
|
项目目录开发
|
||||||
|
```
|
||||||
|
|
||||||
|
### 5.2 操作步骤
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 1. 安装 Remote - SSH 插件(Ctrl + Shift + X)
|
||||||
|
|
||||||
|
# 2. SSH 连接服务器
|
||||||
|
ssh user@192.168.x.x
|
||||||
|
|
||||||
|
# 3. 进入项目目录
|
||||||
|
cd /home/你的项目
|
||||||
|
|
||||||
|
# 4. 开发操作
|
||||||
|
npm install
|
||||||
|
npm run dev
|
||||||
|
|
||||||
|
# 5. 本地访问
|
||||||
|
# 浏览器打开 http://服务器 IP:3000
|
||||||
|
```
|
||||||
|
|
||||||
|
### 5.3 WSL2 vs SSH 方式对比
|
||||||
|
|
||||||
|
| 特性 | WSL2 | SSH 到 Linux 服务器 |
|
||||||
|
|------|------|---------------------|
|
||||||
|
| 环境位置 | Windows 内 | 远程服务器 |
|
||||||
|
| 延迟 | 几乎无 | 有网络延迟 |
|
||||||
|
| 资源使用 | 本地电脑 | 服务器资源 |
|
||||||
|
| 便携性 | 随时可用 | 需要网络连接 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 六、Cursor 系统版与用户版区别
|
||||||
|
|
||||||
|
### 6.1 对比表
|
||||||
|
|
||||||
|
| 特性 | 系统版 (System) | 用户版 (User) |
|
||||||
|
|------|-----------------|---------------|
|
||||||
|
| 作用范围 | 当前操作系统用户 | 所有用户 |
|
||||||
|
| 安装位置 | `C:\Program Files\Cursor` | `C:\Users\用户名\AppData\Local\Programs\Cursor` |
|
||||||
|
| 设置同步 | 不随用户登录漫游 | 随用户账户漫游 |
|
||||||
|
| 管理员权限 | 需要 | 通常不需要 |
|
||||||
|
| 多用户电脑 | 所有用户共用配置 | 各用户独立配置 |
|
||||||
|
|
||||||
|
### 6.2 推荐选择
|
||||||
|
|
||||||
|
- **个人电脑**:用户版(User)
|
||||||
|
- **公司电脑/多用户**:系统版(System)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 七、Cursor 连接 WSL 后的配置位置
|
||||||
|
|
||||||
|
### 7.1 配置读取规则
|
||||||
|
|
||||||
|
**重要:Cursor 连接 WSL 后,所有操作都基于 WSL 的 Linux 系统!**
|
||||||
|
|
||||||
|
| 项目 | 读取位置 |
|
||||||
|
|------|---------|
|
||||||
|
| 扩展插件 | WSL 里的版本(需重装) |
|
||||||
|
| Settings | WSL 的 `~/.cursor/` |
|
||||||
|
| Skills | WSL 里的配置 |
|
||||||
|
| MCP | WSL 里的配置 |
|
||||||
|
| 项目代码 | WSL 的文件系统 |
|
||||||
|
| 运行环境 | WSL 的 Linux 环境 |
|
||||||
|
|
||||||
|
### 7.2 注意事项
|
||||||
|
|
||||||
|
**Windows 本地的配置不生效:**
|
||||||
|
- ❌ 扩展不共用(需在 WSL 里重新安装)
|
||||||
|
- ❌ 快捷键、主题等需重新配置
|
||||||
|
- ❌ Skills、MCP 配置需要重新设置
|
||||||
|
|
||||||
|
**两边配置独立:**
|
||||||
|
- Windows 的 Cursor 配置 ≠ WSL 里的 Cursor 配置
|
||||||
|
- 需要维护两套配置
|
||||||
|
|
||||||
|
### 7.3 配置同步方案
|
||||||
|
|
||||||
|
如果需要同步配置,可以:
|
||||||
|
|
||||||
|
1. 将 `.cursor/` 目录链接到共享位置
|
||||||
|
2. 使用 Cursor 的 Settings Sync 功能
|
||||||
|
3. 使用版本控制管理配置文件
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 八、常见问题 FAQ
|
||||||
|
|
||||||
|
### Q1: WSL2 和虚拟机有什么区别?
|
||||||
|
|
||||||
|
WSL2 更轻量,启动快、资源占用少,与 Windows 集成度更高。虚拟机是完全独立的系统。
|
||||||
|
|
||||||
|
### Q2: Windows 和 WSL 的 Java 环境会冲突吗?
|
||||||
|
|
||||||
|
不会。Windows 的 Java 在 `C:\Program Files\Java`,WSL 的 Java 在 `/usr/lib/jvm`,两套完全独立。
|
||||||
|
|
||||||
|
### Q3: Cursor 连接 WSL 后还能用 Windows 的 MCP 吗?
|
||||||
|
|
||||||
|
不能。连接 WSL 后,所有的 MCP、Skills、扩展都读取 WSL 里的配置。
|
||||||
|
|
||||||
|
### Q4: 哪种方式更好?WSL 还是 SSH?
|
||||||
|
|
||||||
|
- **本地开发**:WSL2
|
||||||
|
- **远程服务器开发**:SSH
|
||||||
|
|
||||||
|
### Q5: WSL2 会影响 Windows 性能吗?
|
||||||
|
|
||||||
|
WSL2 按需使用内存,不会一直占用,性能接近原生 Linux。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 九、总结
|
||||||
|
|
||||||
|
1. **系统选择**:Java/Go/Vue 开发推荐 Windows 11 Pro
|
||||||
|
2. **WSL2 定位**:轻量级 Linux 环境,与 Windows 集成紧密
|
||||||
|
3. **Cursor 连接**:通过官方 WSL 插件实现远程开发
|
||||||
|
4. **环境隔离**:Windows 和 WSL 的开发和运行环境完全独立
|
||||||
|
5. **配置管理**:连接 WSL 后需使用 WSL 内的配置和扩展
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
> 最后更新:2026 年 2 月
|
||||||
233
src/programming/linux/Linux_Mint/系统崩溃记录.md
Normal file
233
src/programming/linux/Linux_Mint/系统崩溃记录.md
Normal file
@@ -0,0 +1,233 @@
|
|||||||
|
---
|
||||||
|
title: 系统崩溃记录
|
||||||
|
icon: simple-icons:linuxmint
|
||||||
|
date: 2026-01-30
|
||||||
|
category:
|
||||||
|
- Linux
|
||||||
|
tag:
|
||||||
|
- Linux Mint
|
||||||
|
- 系统故障
|
||||||
|
- XFCE
|
||||||
|
---
|
||||||
|
|
||||||
|
# 系统崩溃记录
|
||||||
|
|
||||||
|
记录 Linux Mint XFCE 桌面环境崩溃问题的排查过程和解决方案。
|
||||||
|
|
||||||
|
<!-- more -->
|
||||||
|
|
||||||
|
## 📅 基本信息
|
||||||
|
- **时间**: 2026年1月30日
|
||||||
|
- **系统**: Ubuntu 24.04 (Linux 6.14.0-37-generic)
|
||||||
|
- **桌面环境**: XFCE
|
||||||
|
- **问题现象**: XFCE桌面卡死,需要重启
|
||||||
|
|
||||||
|
## 🔍 问题排查过程
|
||||||
|
|
||||||
|
### 1. 系统日志分析
|
||||||
|
|
||||||
|
#### 关键错误日志
|
||||||
|
```
|
||||||
|
systemd-coredump[1453]: Process 1302 (Xorg) of user 0 dumped core.
|
||||||
|
```
|
||||||
|
|
||||||
|
#### LSDConfig 应用崩溃
|
||||||
|
- 进程 `LSDConfig` 多次崩溃
|
||||||
|
- 崩溃原因:尝试连接 DBus 失败
|
||||||
|
- 相关库:`libControlDevice.so` 蓝牙设备控制
|
||||||
|
- 错误堆栈显示与蓝牙硬件变体不支持相关
|
||||||
|
|
||||||
|
```
|
||||||
|
Bluetooth: hci0: Unsupported hardware variant (00007902)
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. GPU 驱动问题
|
||||||
|
|
||||||
|
#### AMD GPU 超时警告
|
||||||
|
```
|
||||||
|
amdgpu 0000:c4:00.0: [drm] REG_WAIT timeout 1us * 1000 tries - dcn314_dsc_pg_control line:251
|
||||||
|
amdgpu 0000:c4:00.0: [drm] REG_WAIT timeout 1us * 1000 tries - dcn314_dsc_pg_control line:259
|
||||||
|
amdgpu 0000:c4:00.0: [drm] REG_WAIT timeout 1us * 1000 tries - dcn314_dsc_pg_control line:267
|
||||||
|
amdgpu 0000:c4:00.0: [drm] REG_WAIT timeout 1us * 1000 tries - dcn314_dsc_pg_control line:275
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 显卡信息
|
||||||
|
- 型号:AMD Radeon 760M
|
||||||
|
- 驱动:amdgpu 3.61.0
|
||||||
|
- 显示器:双屏配置
|
||||||
|
- 主屏:SKG 2716 (2560x1440 @ 165Hz)
|
||||||
|
- 副屏:RTK Sculptor (1920x1080 @ 60Hz)
|
||||||
|
|
||||||
|
### 3. 系统资源状态
|
||||||
|
|
||||||
|
#### 内存使用情况
|
||||||
|
```
|
||||||
|
总内存:29Gi
|
||||||
|
已用:3.2Gi
|
||||||
|
可用:25Gi
|
||||||
|
交换:15Gi (未使用)
|
||||||
|
```
|
||||||
|
- 内存使用正常,无内存压力
|
||||||
|
- 无 OOM Killer 活动
|
||||||
|
|
||||||
|
#### 进程资源占用
|
||||||
|
```
|
||||||
|
Xorg 进程:8.5% CPU, 212MB 内存
|
||||||
|
LSDConfig:仍在运行,但已多次崩溃
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4. 系统启动时间线
|
||||||
|
- 11:29:43 - 系统启动
|
||||||
|
- 11:29:46 - Xorg 崩溃并重启
|
||||||
|
- 11:29:47 - LightDM 显示管理器启动
|
||||||
|
- 11:30:31 - 用户会话启动
|
||||||
|
|
||||||
|
## 🎯 根本原因分析
|
||||||
|
|
||||||
|
### 主要原因:LSDConfig 应用程序崩溃
|
||||||
|
|
||||||
|
**问题详情**:
|
||||||
|
1. LSDConfig 尝试访问蓝牙设备失败
|
||||||
|
2. DBus 连接问题导致系统调用阻塞
|
||||||
|
3. 多次崩溃触发 systemd coredump
|
||||||
|
4. 间接影响 X11 服务器稳定性,导致桌面卡死
|
||||||
|
|
||||||
|
**技术分析**:
|
||||||
|
```
|
||||||
|
堆栈跟踪显示:
|
||||||
|
g_dbus_connection_send_message_with_reply_sync()
|
||||||
|
BtStart() - 蓝牙启动失败
|
||||||
|
libControlDevice.so - 设备控制库错误
|
||||||
|
```
|
||||||
|
|
||||||
|
### 次要原因:GPU 驱动超时
|
||||||
|
- AMD GPU DSC (Display Stream Compression) 电源控制超时
|
||||||
|
- 虽然不直接导致崩溃,但可能影响渲染性能
|
||||||
|
|
||||||
|
## 💡 解决方案
|
||||||
|
|
||||||
|
### 立即措施
|
||||||
|
|
||||||
|
#### 方案1:修复蓝牙问题(推荐)
|
||||||
|
```bash
|
||||||
|
# 更新蓝牙驱动
|
||||||
|
sudo apt update
|
||||||
|
sudo apt install --reinstall bluez firmware-amd-graphics
|
||||||
|
|
||||||
|
# 重启蓝牙服务
|
||||||
|
sudo systemctl restart bluetooth
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 方案2:临时禁用问题应用
|
||||||
|
```bash
|
||||||
|
# 停止 OCular 监控服务
|
||||||
|
sudo systemctl stop startLSDEfsSvr.service
|
||||||
|
sudo systemctl disable startLSDEfsSvr.service
|
||||||
|
|
||||||
|
# 备份并移除问题应用
|
||||||
|
sudo mv /usr/local/.OCular/LSDConfig /usr/local/.OCular/LSDConfig.bak
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 方案3:完全卸载 OCular 套件
|
||||||
|
```bash
|
||||||
|
# 使用官方卸载脚本
|
||||||
|
sudo /usr/local/.OCular/uninstall.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
### 长期解决方案
|
||||||
|
|
||||||
|
1. **联系供应商**
|
||||||
|
- 向 OCular 软件供应商报告崩溃问题
|
||||||
|
- 获取针对 AMD GPU 的补丁或更新版本
|
||||||
|
|
||||||
|
2. **配置调整**
|
||||||
|
- 修改 `/etc/.OCular/config.xml`
|
||||||
|
- 禁用蓝牙设备监控功能
|
||||||
|
- 减少硬件监控频率
|
||||||
|
|
||||||
|
3. **系统优化**
|
||||||
|
- 定期检查 GPU 驱动更新
|
||||||
|
- 监控系统日志中的错误信息
|
||||||
|
|
||||||
|
## 📊 影响评估
|
||||||
|
|
||||||
|
### 禁用 LSDConfig 的影响
|
||||||
|
|
||||||
|
**失去的功能**:
|
||||||
|
- ❌ 蓝牙设备自动配置
|
||||||
|
- ❌ 实时硬件监控
|
||||||
|
- ❌ 网络访问控制策略
|
||||||
|
- ❌ 系统性能数据收集
|
||||||
|
- ❌ 企业级监控报告
|
||||||
|
|
||||||
|
**保留的功能**:
|
||||||
|
- ✅ 系统基本功能
|
||||||
|
- ✅ XFCE 桌面环境
|
||||||
|
- ✅ 蓝牙手动控制
|
||||||
|
- ✅ 硬件基础使用
|
||||||
|
|
||||||
|
## 🔧 系统配置信息
|
||||||
|
|
||||||
|
### 硬件环境
|
||||||
|
```
|
||||||
|
CPU: AMD EPYC Embedded 7000 Series (基于虚拟化信息)
|
||||||
|
GPU: AMD Radeon 760M
|
||||||
|
内存: 32GB
|
||||||
|
显示器: 双屏配置
|
||||||
|
```
|
||||||
|
|
||||||
|
### 软件环境
|
||||||
|
```
|
||||||
|
操作系统: Ubuntu 24.04
|
||||||
|
内核版本: 6.14.0-37-generic
|
||||||
|
X Server: X.Org X Server 1.21.1.11
|
||||||
|
桌面环境: XFCE
|
||||||
|
显示管理器: LightDM
|
||||||
|
```
|
||||||
|
|
||||||
|
### 关键进程
|
||||||
|
```
|
||||||
|
xfce4-session - XFCE 会话管理
|
||||||
|
xfwm4 - 窗口管理器
|
||||||
|
xfce4-panel - 面板
|
||||||
|
xfce4-terminal - 终端
|
||||||
|
LSDConfig - OCular 设备配置管理器 (问题源头)
|
||||||
|
```
|
||||||
|
|
||||||
|
## 📝 后续建议
|
||||||
|
|
||||||
|
1. **监控日志**
|
||||||
|
```bash
|
||||||
|
# 持续监控 Xorg 日志
|
||||||
|
tail -f /var/log/Xorg.0.log
|
||||||
|
|
||||||
|
# 监控系统日志
|
||||||
|
journalctl -f
|
||||||
|
```
|
||||||
|
|
||||||
|
2. **定期检查**
|
||||||
|
- 每周检查系统错误日志
|
||||||
|
- 监控 GPU 温度和性能
|
||||||
|
- 关注 OCular 服务状态
|
||||||
|
|
||||||
|
3. **备份配置**
|
||||||
|
- 定期备份 `/etc/.OCular/` 配置
|
||||||
|
- 保存重要的 XFCE 配置文件
|
||||||
|
|
||||||
|
4. **预防措施**
|
||||||
|
- 避免同时运行大量图形密集应用
|
||||||
|
- 定期更新系统驱动
|
||||||
|
- 保持足够的系统资源
|
||||||
|
|
||||||
|
## 📞 技术支持
|
||||||
|
|
||||||
|
如果问题持续,请联系:
|
||||||
|
- **系统管理员**:检查企业监控策略
|
||||||
|
- **硬件供应商**:确认 GPU 驱动兼容性
|
||||||
|
- **OCular 软件供应商**:报告崩溃问题并获取支持
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**文档创建时间**: 2026-01-30 11:40
|
||||||
|
**排查工具**: journalctl, dmesg, Xorg 日志, 进程监控
|
||||||
|
**记录状态**: 已完成初步分析和解决方案制定
|
||||||
64
src/work/log/2026-01.md
Normal file
64
src/work/log/2026-01.md
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
---
|
||||||
|
icon: mdi:note-text
|
||||||
|
date: 2026-01-01
|
||||||
|
category:
|
||||||
|
- 日志
|
||||||
|
tag:
|
||||||
|
- 个人日志
|
||||||
|
title: 202601日志
|
||||||
|
---
|
||||||
|
202601日志
|
||||||
|
<!-- more -->
|
||||||
|
# 2026年1月工作日志
|
||||||
|
|
||||||
|
## 第一周(1月1日-1月7日)
|
||||||
|
|
||||||
|
## 第二周(1月8日-1月14日)
|
||||||
|
|
||||||
|
## 第三周(1月15日-1月21日)
|
||||||
|
|
||||||
|
## 第四周(1月22日-1月28日)
|
||||||
|
|
||||||
|
### PRS7050场站系统
|
||||||
|
|
||||||
|
#### 上周工作总结(1月19日-1月25日)
|
||||||
|
|
||||||
|
##### 一、主要工作内容
|
||||||
|
|
||||||
|
1. **流水线与依赖注入修复**
|
||||||
|
- 修复设备点流水线中的依赖注入问题 (#249843)
|
||||||
|
- 优化导入更新流程,不再处理syscode (#249841)
|
||||||
|
- 修复空指针异常问题,过滤空名称条目 (#249830)
|
||||||
|
|
||||||
|
2. **监控与平台集成**
|
||||||
|
- 实现遥控配置获取功能,结合平台接口 (#249811)
|
||||||
|
- 修复控制服务pom.xml依赖异常问题
|
||||||
|
|
||||||
|
3. **数据库兼容性优化**
|
||||||
|
- 解决瀚高数据库更新后顺序改变的问题 (#249802)
|
||||||
|
- 修复mysqli函数last_insert_id在瀚高数据库中的报错问题 (#249793)
|
||||||
|
- 优化MyBatis映射文件中的SQL语句 (#249795)
|
||||||
|
- 处理动态SQL包含问号的问题 (#249794)
|
||||||
|
|
||||||
|
4. **项目配置与依赖管理**
|
||||||
|
- 调整模块顺序并更新模块名称,优化sunri-mybatisplus-starter (#249797)
|
||||||
|
- 同步2024多个版本更新 (#249764, #249763, #249795, #249794, #249793)
|
||||||
|
- 修复依赖异常 (#249754)
|
||||||
|
- 移除单体项目 (#249752)
|
||||||
|
|
||||||
|
5. **协议与配置优化**
|
||||||
|
- 默认取二次设备协议 (#249756)
|
||||||
|
- 清理私有仓库配置 (删除10.1.105.49:8081) (#249751, #249748)
|
||||||
|
|
||||||
|
##### 二、本周工作重点
|
||||||
|
|
||||||
|
- 完成了多项数据库兼容性优化,提升了系统在瀚高数据库环境下的稳定性
|
||||||
|
- 修复了关键的依赖注入问题,保障了设备点流水线功能的正常运行
|
||||||
|
- 优化了项目配置结构,清理了不必要的仓库配置
|
||||||
|
|
||||||
|
##### 三、下周计划
|
||||||
|
|
||||||
|
- 继续跟进数据库兼容性问题
|
||||||
|
- 优化系统性能和稳定性
|
||||||
|
|
||||||
|
## 第五周(1月29日-1月31日)
|
||||||
Reference in New Issue
Block a user