主题
界面
主题
本课程 172 节一路踩下来的环境,就是一份"实测过的环境模板" ✓✓:
JDK 25(Microsoft OpenJDK)· Maven Wrapper · PostgreSQL 18 · H2 ·
PowerShell 7(pwsh)· Git · Edge 153(UI 测试)· Node(站点构建)★ 本节把它整理成"新机器一键就绪"的清单 ✓✓
| 软件 | 版本 | 用在哪 | 实测备注 |
|---|---|---|---|
| JDK ★★★ | 25(Microsoft OpenJDK) | 全部 labs | Mockito 不兼容(《项目 A:测试方案与分层测试》 实测 ✗)⚠️ |
| Maven ★★★ | Wrapper(mvnw) | 构建 | 用 Wrapper 而非全局安装(版本随仓库走 ✓✓) |
| PostgreSQL ★★ | 18 | S3、project-a(postgres profile) | 默认库 kb_learn、用户 postgres ✓ |
| H2 ★★ | 随 Spring Boot | project-a 默认库、单测 | 内存库零依赖 ✓✓ |
| PowerShell ★★★ | 7(pwsh) | 所有脚本 | 5.1 读脚本按 ANSI(约束 4 ✗✓)—— 用 pwsh ✓ |
| Git ★★★ | — | 版本管理 | 提交/标签/回滚全程使用 ✓ |
| Edge ★★ | 153 | UI 测试(Selenium) | 驱动从 npmmirror 取同版本(约束 6.1)✓ |
| Node ★ | — | 站点构建(VitePress) | 构建时清空 NODE_OPTIONS(约束 3:safe-delete shim)✗✓ |
★★★ 这张表每一行都有"实测备注" ✓✓ —— 这就是环境模板与"安装文档"的区别:它记录的是坑 ✓✓✓
| # | 纪律 | 实测依据 |
|---|---|---|
| ① | 用 Wrapper,不用全局工具 ★★★ | mvnw 让构建与 Maven 版本绑定在仓库里 ✓✓ |
| ② | 新库/新版本先小规模验证 ★★★ | Mockito × JDK25 全测试 Error(《项目 A:测试方案与分层测试》)✗✓ |
| ③ | 环境差异用 profile 隔离 ★★★ | H2(演示)/ PostgreSQL(真实)(《项目 A:数据库设计》)✓✓ |
★★ 一条更深的认识 ✓✓✓:
环境的坑不是"运气差",而是"变更管理缺失" ✗✓
· 升级 JDK 前先跑测试套件 ✓ · 任何"本机能跑"都要能复现到 CI ✓✓ · 环境也要进版本管理(脚本、配置、模板)✓✓✓
★ 模板的定义 ✓:不只是"装了什么",还包括"怎么验证装对了" ✓✓
# ===== 本项目环境自检(复制即用)=====
"JDK: " + (java -version 2>&1 | Select-Object -First 1)
"Maven: " + (& .\mvnw.cmd -version 2>&1 | Select-Object -First 1)
"pwsh: " + $PSVersionTable.PSVersion
"PG 5432: " + ((Get-NetTCPConnection -LocalPort 5432 -State Listen -ErrorAction SilentlyContinue | Measure-Object).Count)
"PG psql: " + (Get-Command psql -ErrorAction SilentlyContinue).Source
"Edge: " + (Test-Path "C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe")
"驱动: " + (Test-Path "labs/ui-testing/.driver/msedgedriver.exe")
"H2 仓库: " + (Test-Path "$env:USERPROFILE\.m2\repository\com\h2database\h2")
# 最后一条:真正证明就绪的是「测试能跑」
cd labs; .\mvnw.cmd -B -ntp -pl cs-basics test -q; "cs-basics 测试: $LASTEXITCODE(0 = 就绪)"★★ 最后一条是灵魂 ✓✓✓:"装好了"的唯一证明是"工作能跑通" ✓
| 类别 | 推荐 | 理由 |
|---|---|---|
| API 工具 ★★ | curl(脚本)/ IDEA HTTP Client(可入 Git)✓ | 请求文件进仓库 = 可复现 ✓✓ |
| 数据库客户端 ★★ | IDEA Database / DBeaver | 与代码同一 IDE ✓ |
| 抓包 ★★ | Wireshark(学网络)/ Fiddler(HTTP) | 呼应 《网络分层模型与数据传输过程》 ✓ |
| 终端 ★★★ | pwsh + Windows Terminal | UTF-8、语法现代(约束 4)✓✓ |
① JDK + JAVA_HOME → ② Git → ③ 项目 clone → ④ mvnw(自动)→ ⑤ pwsh
→ ⑥ PostgreSQL(可选 profile 用)→ ⑦ 环境自检脚本 → ⑧ 跑一个模块的测试 ✓- name: 环境自检
run: |
java -version
./mvnw -version
# ★ CI 的环境是可声明的(actions/setup-java 指定版本)✓✓✗ "最新版"是移动目标 ✗✗ —— Mockito/JDK25 就是这么撞上的 ✗
✓ 写死"JDK 21 LTS"或与仓库一致,并给出验证命令 ✓✓本项目环境故障一览(全部真实) ✓:
| 故障 | 章节 |
|---|---|
| PowerShell 5.1 按 ANSI 读脚本 → 语法错误 | 约束 4(《项目 A:部署与运维》 前后)✓ |
| safe-delete shim 拦截构建 | 约束 3(S4)✓ |
| Mockito × JDK25 | 《项目 A:测试方案与分层测试》 ✓ |
| Selenium Manager 下载不到驱动 | 约束 6.1(S4)✓ |
| localhost 外链导致站点构建失败 | 《项目 A:前端页面实现》 ✓ |
★ 每一条都已沉淀成约束或讲义 ✓✓(《项目 A:复盘与简历表达》 的原则:坑变成约束或讲义 ✓)
| # | 错误 | 说明 |
|---|---|---|
| 1 | 全局安装构建工具 ✗ | 版本漂移;用 Wrapper ✓✓ |
| 2 | "最新版"当版本号 ✗✗ | 不可复现 ✓✓ |
| 3 | 环境只有文档没有验证 ✗✗ | 装了 ≠ 能跑 ✓✓ |
| 4 | 敏感配置(PG 密码)硬编码 ✗✗ | 走环境变量 ✓ |
| 5 | 多人环境不一致 ✗✗ | 用模板 + 自检脚本对齐 ✓✓ |
scripts/env-check.ps1),提交 ✓✓;验收方式:新同事照你的清单 30 分钟内跑通第一个模块的测试。
扩展任务:写开发环境 Dockerfile/脚本(无 Docker 机器可用脚本版):
S5 阶段至此完成(14/14) ✓✓。 接下来进入 S6 框架源码:《并发基础:线程、锁与内存模型》。
无,可直接开始
暂无