第1组 · 陈星宇 · 第1次评审详情 - sebestp/coursewise GitHub Wiki
- 报告期次:第1次 | 报告日期:2026-10-08 | 项目组号:第1组 | 项目名称:在线购物系统
-
已完成工作:搭建 GitHub 仓库与 Wiki,建立仓库目录结构与协作规范
-
已完成工作:编写构建手册与部署手册、Dockerfile、构建脚本
-
成果物:构建与部署手册
第 1 组 · 在线购物系统 | 负责人:陈星宇(组长/DevOps) 目标:让读者在一台全新的机器上,按本手册从源码构建出可运行的产物并完成部署。
| 依赖 | 版本要求 | 获取方式 | 是否必需 |
|---|---|---|---|
| JDK | 17 及以上(本项目在 JDK 21 上实测通过) | https://adoptium.net/ | 必需 |
| Maven | 3.9.x(本项目在 3.9.16 上实测通过) | https://maven.apache.org/ | 必需 |
| Docker | 24+ | https://www.docker.com/ | 仅容器化部署时需要 |
| MySQL | — | — |
不需要,本项目使用 H2 文件库,数据落盘 ./data/,零安装 |
验证环境:
java -version
mvn -versiongit clone https://github.com/xych5q/online-shop.git
cd online-shop/server # 后端工程根目录(pom.xml 在此)cd server
mvn clean # 清理 target/
mvn compile # 编译 src/main/java
mvn test # 执行 JUnit 用例,失败则中断
mvn package # 打包为可执行 jar一键等价:cd server && mvn clean package
实测结果(2026-10-07,组长本地执行):
-
mvn package→ BUILD SUCCESS,产出server/target/online-shop.jar(约 49 MB,含全部依赖的 Spring Boot fat jar)。 -
mvn test→ 迭代 1 首版Tests run: 16;2026-10-13 整改后为Tests run: 18, Failures: 0, Errors: 0, Skipped: 0(新增 TC-A17 交易中撤销且递补、TC-A18 交易中撤销且队列空恢复在售,见 测试用例清单)。BUILD SUCCESS。
每一步发生了什么(验收会问):
-
clean删除target/,保证无历史残留。 -
compile把src/main/java编译为target/classes下的.class。 -
test执行src/test/java的 JUnit 5 用例(MockMvc 集成流程),失败则构建中断。 -
package把 class +src/main/resources(含static/前端页面)+ 依赖打成可执行 jar。 - 依赖由
pom.xml声明,Maven 自动解析,不需要手动拷贝 jar。
cd server
java -jar target/online-shop.jar- 默认端口 8080;若被占用,加参数
--server.port=8090。 - 首次启动会自动创建管理员账号并在日志中打印账号密码,形如:
已创建卖家账号:admin / xxxxxxxx。 - 数据持久化在
./data/下的 H2 文件库,重启不丢失。
验证:
| 地址 | 预期 |
|---|---|
| http://localhost:8080/index.html | 买家端商品详情页,HTTP 200 |
| http://localhost:8080/admin.html | 卖家后台登录页,HTTP 200 |
| http://localhost:8080/api/product | 返回当前在售商品 JSON |
注意:本服务没有
/health端点,探活请用/api/product。
跑完全量接口冒烟(44 项断言,脚本自带遗留数据清理,可重复执行):
##### 另开一个终端;建议用独立数据目录起一个干净实例,避免污染开发库
cd server && java -jar target/online-shop.jar --server.port=8090 \
--spring.datasource.url="jdbc:h2:file:./data-smoke/onlineshop;DB_CLOSE_ON_EXIT=FALSE" \
--app.upload.dir=./data-smoke/uploads
cd ../test-cases && BASE=http://localhost:8090 bash api-smoke.sh实测(2026-10-13,在端口 8092 的全新空库实例上整跑):通过 44 项,失败 0 项。
镜像采用两阶段构建(Maven 打包 + JRE 运行),deploy/Dockerfile 已按 server/ 子目录结构适配:
##### 在仓库根目录执行
docker build -f deploy/Dockerfile -t online-shop:0.1 .
docker run -d --name shop -p 8080:8080 online-shop:0.1
##### 验证(同上:没有 /health,用 /api/product)
curl -o /dev/null -w '%{http_code}\n' http://localhost:8080/api/product
##### 导出镜像作为验收材料
docker save online-shop:0.1 -o dist/online-shop-0.1-iter1.tar一键(推荐,会把"跑单测 → 构建 → 起容器 → 等就绪 → 冒烟 → 导出 tar"一次做完):
bash deploy/docker-verify.sh带数据卷(容器重启数据不丢):docker compose -f deploy/docker-compose.yml up -d;
重置数据:docker compose -f deploy/docker-compose.yml down -v。
状态说明(2026-10-13 更新):Docker 镜像属于 10-15 基线验收五件套之一。本轮已完成准备工作——Dockerfile 两阶段基础镜像统一为 JDK/JRE 21(此前的 17 与 pom 的
java.version=21不符)、补.dockerignore裁剪构建上下文、新增docker-compose.yml与docker-verify.sh。 仍未完成:开发者笔记本未安装 Docker Desktop,因此镜像的真实构建与运行尚未在本机落地,需换一台装了 Docker 的机器执行deploy/docker-verify.sh,产出dist/online-shop-0.1-iter1.tar与一次成功运行的截图/录屏。详见deploy/部署手册.md第 5 节实测记录。
| 现象 | 原因 | 处理 |
|---|---|---|
| 依赖下载超时 | 默认中央仓库在国内慢 | 配置阿里云镜像 ~/.m2/settings.xml
|
| 测试用例失败 | 代码或环境问题 | 查看 target/surefire-reports/
|
| 端口被占用 | 8080 已被其他程序占用 | 加 --server.port=8090
|
| 找不到主类 | 打包插件未生效 | 检查 pom.xml 中 spring-boot-maven-plugin |
(评审后填写)