Skip to content

开发常用软件与环境模板 ​

S5-014选修入门约 30 分钟JDK 21项目实战 · 工具与资源

1. 本节定位 ​

本课程 172 节一路踩下来的环境,就是一份"实测过的环境模板" ✓✓:

text
JDK 25(Microsoft OpenJDK)· Maven Wrapper · PostgreSQL 18 · H2 ·
PowerShell 7(pwsh)· Git · Edge 153(UI 测试)· Node(站点构建)

★ 本节把它整理成"新机器一键就绪"的清单 ✓✓

2. 学习目标 ​

  • 能照清单把新机器配到"能跑本项目" ★★★;
  • 知道版本兼容是最常见的环境坑(JDK 25 × Mockito 实测) ★★★;
  • 知道环境模板要"可验证"(一条命令证明就绪) ★★★。

3. 核心概念 ​

3.1 本项目实测过的环境清单 ★★★ ​

软件版本用在哪实测备注
JDK ★★★25(Microsoft OpenJDK)全部 labsMockito 不兼容(《项目 A:测试方案与分层测试》 实测 ✗)⚠️
Maven ★★★Wrapper(mvnw)构建用 Wrapper 而非全局安装(版本随仓库走 ✓✓)
PostgreSQL ★★18S3、project-a(postgres profile)默认库 kb_learn、用户 postgres ✓
H2 ★★随 Spring Bootproject-a 默认库、单测内存库零依赖 ✓✓
PowerShell ★★★7(pwsh)所有脚本5.1 读脚本按 ANSI(约束 4 ✗✓)—— 用 pwsh ✓
Git ★★★—版本管理提交/标签/回滚全程使用 ✓
Edge ★★153UI 测试(Selenium)驱动从 npmmirror 取同版本(约束 6.1)✓
Node ★—站点构建(VitePress)构建时清空 NODE_OPTIONS(约束 3:safe-delete shim)✗✓

★★★ 这张表每一行都有"实测备注" ✓✓ —— 这就是环境模板与"安装文档"的区别:它记录的是坑 ✓✓✓

3.2 三条环境纪律 ★★★ ​

#纪律实测依据
①用 Wrapper,不用全局工具 ★★★mvnw 让构建与 Maven 版本绑定在仓库里 ✓✓
②新库/新版本先小规模验证 ★★★Mockito × JDK25 全测试 Error(《项目 A:测试方案与分层测试》)✗✓
③环境差异用 profile 隔离 ★★★H2(演示)/ PostgreSQL(真实)(《项目 A:数据库设计》)✓✓

★★ 一条更深的认识 ✓✓✓:

环境的坑不是"运气差",而是"变更管理缺失" ✗✓

· 升级 JDK 前先跑测试套件 ✓ · 任何"本机能跑"都要能复现到 CI ✓✓ · 环境也要进版本管理(脚本、配置、模板)✓✓✓

3.3 环境模板:一条命令证明"就绪" ★★★ ​

★ 模板的定义 ✓:不只是"装了什么",还包括"怎么验证装对了" ✓✓

powershell
# ===== 本项目环境自检(复制即用)=====
"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 = 就绪)"

★★ 最后一条是灵魂 ✓✓✓:"装好了"的唯一证明是"工作能跑通" ✓

3.4 常用软件的选位 ★★ ​

类别推荐理由
API 工具 ★★curl(脚本)/ IDEA HTTP Client(可入 Git)✓请求文件进仓库 = 可复现 ✓✓
数据库客户端 ★★IDEA Database / DBeaver与代码同一 IDE ✓
抓包 ★★Wireshark(学网络)/ Fiddler(HTTP)呼应 《网络分层模型与数据传输过程》 ✓
终端 ★★★pwsh + Windows TerminalUTF-8、语法现代(约束 4)✓✓

6. 递进示例 ​

6.1 最小示例:新机器就绪顺序 ​

text
① JDK + JAVA_HOME → ② Git → ③ 项目 clone → ④ mvnw(自动)→ ⑤ pwsh
→ ⑥ PostgreSQL(可选 profile 用)→ ⑦ 环境自检脚本 → ⑧ 跑一个模块的测试 ✓

6.2 业务示例:把"环境自检"放进 CI ​

yaml
- name: 环境自检
  run: |
    java -version
    ./mvnw -version
    # ★ CI 的环境是可声明的(actions/setup-java 指定版本)✓✓

6.3 反例:README 写"装个最新版 JDK" ​

text
✗ "最新版"是移动目标 ✗✗ —— Mockito/JDK25 就是这么撞上的 ✗
✓ 写死"JDK 21 LTS"或与仓库一致,并给出验证命令 ✓✓

7. 实测 ​

本项目环境故障一览(全部真实) ✓:

故障章节
PowerShell 5.1 按 ANSI 读脚本 → 语法错误约束 4(《项目 A:部署与运维》 前后)✓
safe-delete shim 拦截构建约束 3(S4)✓
Mockito × JDK25《项目 A:测试方案与分层测试》 ✓
Selenium Manager 下载不到驱动约束 6.1(S4)✓
localhost 外链导致站点构建失败《项目 A:前端页面实现》 ✓

★ 每一条都已沉淀成约束或讲义 ✓✓(《项目 A:复盘与简历表达》 的原则:坑变成约束或讲义 ✓)

8. Debug 观察点 ​

  1. 跑一遍 3.3 的自检脚本:看哪一项不符合 ✓✓;
  2. 把 pwsh 换成 powershell 跑同一脚本:复现编码问题 ✗✓;
  3. 升级一个小版本的工具:跑全量测试验证 ✓✓。

9. 常见错误 ​

#错误说明
1全局安装构建工具 ✗版本漂移;用 Wrapper ✓✓
2"最新版"当版本号 ✗✗不可复现 ✓✓
3环境只有文档没有验证 ✗✗装了 ≠ 能跑 ✓✓
4敏感配置(PG 密码)硬编码 ✗✗走环境变量 ✓
5多人环境不一致 ✗✗用模板 + 自检脚本对齐 ✓✓

10. 动手实验 ​

  1. 跑 3.3 的自检脚本,修复所有不符合项 ✓✓;
  2. 把自检脚本存入仓库(scripts/env-check.ps1),提交 ✓✓;
  3. 在一台"干净"的机器/容器里照清单搭建,记录遗漏 ★★★;
  4. 升级 JDK 小版本,跑 24 个模块全量测试 ★★★。

验收方式:新同事照你的清单 30 分钟内跑通第一个模块的测试。

扩展任务:写开发环境 Dockerfile/脚本(无 Docker 机器可用脚本版):

  • 装 JDK/Git/pwsh + 拉仓库 + 环境自检 ✓✓;
  • 原则:每一步都要幂等(可重复执行) ✓✓★

11. 练习题 ​

  1. 判断:环境只要装好就行,不需要验证。(对 / 错)
  2. 填空:环境模板 = 「装什么」+「」+「」。
  3. 简答:为什么用 Maven Wrapper 而不是全局 Maven?
  4. (判断)README 里写"请安装最新版 JDK"可以吗?
  5. (设计)新同事第一天报到的环境清单怎么设计?
参考答案(要点)
  1. 错 ✗✗。"装好了"的唯一证明是"工作能跑通" ✓✓★
  2. 怎么验证装对了;实测备注(坑) ✓✓
  3. 构建与 Maven 版本绑定在仓库里 ✓✓ —— 所有协作者与 CI 用同一版本,消除"我这能构建" ✓✓★
  4. 不可以 ✗✗。"最新版"是移动目标 ✗ —— 写死与仓库一致的版本 + 验证命令 ✓✓★
  5. 要点:① 清单式(可勾选) ✓;② 每步带验证命令 ✓✓; ③ 自检脚本一键跑 ✓✓;④ 第一个任务定为"跑通某模块测试" ✓; ⑤ 卡住时把坑补回清单(持续修订)✓✓★

12. 掌握标准 ​

  • [ ] 能照清单搭出本项目环境 ★★★;
  • [ ] 知道三条环境纪律 ★★★;
  • [ ] 会写"带验证的环境模板" ★★★;
  • [ ] 知道"装好 ≠ 能跑" ★★★。

13. 扩展资源 ​

14. 下一步学习 ​

S5 阶段至此完成(14/14) ✓✓。 接下来进入 S6 框架源码:《并发基础:线程、锁与内存模型》。

前置知识

无,可直接开始

后续知识

暂无

进度只保存在本机浏览器,可随时清除

个人学习项目:AI 生成内容均经人工复核,第三方资源仅作索引