claude code+openspec开发java代码基本流程
下面这份「一步一截图」教程,带你从 0 到 1 跑通
「OpenSpec 需求 → Claude Code 生成 feature/StepDefinition/业务代码 → Cucumber-JVM + JUnit5 执行 → Allure 报告 → OpenSpec 归档」
全程 15 分钟,复制即可运行。
0️⃣ 前置检查(2 分钟)
- JDK 17+
java -version出现17+即可。 - Maven 3.9+
mvn -v出现3.9+即可。 - Node 20+
node -v出现v20+即可。
1️⃣ 创建空项目(1 分钟)
mvn archetype:generate \
-DgroupId=com.example \
-DartifactId=demo-cucumber-junit5 \
-DarchetypeArtifactId=maven-archetype-quickstart \
-DinteractiveMode=false
cd demo-cucumber-junit5
2️⃣ 一键引入依赖(复制即用)
把下面整块粘进 pom.xml,覆盖原来的 <dependencies> 和 <build>:
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<cucumber.version>7.21.1</cucumber.version>
<junit-platform.version>1.11.3</junit-platform.version>
<allure.version>2.29.0</allure.version>
</properties>
<dependencies>
<!-- Cucumber -->
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-java</artifactId>
<version>${cucumber.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-junit-platform-engine</artifactId>
<version>${cucumber.version}</version>
<scope>test</scope>
</dependency>
<!-- JUnit5 平台 -->
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-suite</artifactId>
<version>${junit-platform.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>5.11.3</version>
<scope>test</scope>
</dependency>
<!-- Allure 报告 -->
<dependency>
<groupId>io.qameta.allure</groupId>
<artifactId>allure-cucumber7-jvm</artifactId>
<version>${allure.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<!-- 让 mvn test 能发现 Cucumber -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.2.5</version>
<configuration>
<includes>
<include>**/*Test.java</include>
<include>**/*Cucumber.java</include>
</includes>
</configuration>
</plugin>
<!-- Allure 命令行 -->
<plugin>
<groupId>io.qameta.allure</groupId>
<artifactId>allure-maven</artifactId>
<version>2.12.0</version>
</plugin>
</plugins>
</build>
保存后执行
mvn dependency:resolve 确保无红字。
3️⃣ 安装 OpenSpec + Claude Code(全局一次)
npm i -g @fission-ai/openspec@latest
npm i -g claude-code@latest
4️⃣ 需求阶段:1 句话 → 生成 feature
# 在项目根目录
echo "用户登录:输入正确用户名 admin 和密码 123456 后能跳到首页" > login.req
# 让 Claude Code 帮你生成 feature 文件
claude-code --prompt "请把 login.req 转成标准 Gherkin 语法的 login.feature,并存放到 src/test/resources/com/example/cucumber/features/"
✅ 生成完你会得到:
src/test/resources/com/example/cucumber/features/login.feature
Feature: 用户登录
Scenario: 正确登录
Given 用户在登录页
When 输入用户名 "admin" 和密码 "123456"
Then 应跳转到首页并显示欢迎信息
5️⃣ 实现阶段:AI 帮你写 StepDefinition + 业务代码
claude-code --prompt "请按 login.feature 生成:
1. StepDefinition 类,放在 src/test/java/com/example/cucumber/steps/
2. 对应的 LoginPage/LoginService 代码,放在 src/main/java/
3. JUnit5 单元测试
4. 确保 mvn test 能直接通过"
⚠️ 出现提示时连续回车 3 次,确认写入。
生成示例:
src/test/java/com/example/cucumber/steps/LoginStepDef.java
src/main/java/com/example/service/LoginService.java
src/test/java/com/example/service/LoginServiceTest.java
6️⃣ 创建 JUnit5 入口(让 Maven 能扫到 Cucumber)
新建文件 src/test/java/com/example/cucumber/RunCucumberTest.java:
package com.example.cucumber;
import org.junit.platform.suite.api.ConfigurationParameter;
import org.junit.platform.suite.api.SelectClasspathResource;
import org.junit.platform.suite.api.Suite;
import static io.cucumber.junit.platform.engine.Constants.PLUGIN_PROPERTY_NAME;
@Suite
@SelectClasspathResource("com/example/cucumber/features") // 对应 feature 目录
@ConfigurationParameter(key = PLUGIN_PROPERTY_NAME,
value = "pretty," +
"html:target/cucumber.html," +
"io.qameta.allure.cucumber7jvm.AllureCucumber7Jvm")
public class RunCucumberTest {
}
7️⃣ 第一次跑:看场景是否通过
mvn test
控制台最后应出现:
Tests run: 1, Failures: 0, Errors: 0
同时生成:
target/cucumber.html(Cucumber 原生)target/allure-results(Allure 原始数据)
8️⃣ 生成 Allure 漂亮报告
mvn allure:serve
浏览器自动打开 http://localhost:63342/ → 左侧能看到「正确登录」场景 ✅/❌。
9️⃣ 归档:把「需求+代码+报告」一起上锁
# 登记本次需求
openspec init # 第一次才需要
openspec add login.req # 把需求文件收进 spec 仓库
# 归档(自动打 Tag:v2025-11-03-login)
openspec archive login --tag --yes
以后随时:
git checkout v2025-11-03-login 即可回到「当时的需求 + 代码 + cucumber.json」。
🔟 常用命令速查(收藏即可)
| 场景 | 命令 |
|---|---|
| 需求→feature | claude-code --prompt "把 xxx.req 转成 feature" |
| feature→代码 | claude-code --prompt "按 xxx.feature 生成 StepDef+业务+单测" |
| 本地跑 | mvn test |
| 看报告 | mvn allure:serve |
| 归档 | openspec archive 需求名 --tag --yes |
🎉 至此,你已经拥有:
- 会读需求的 AI(Claude Code)
- 会管规范的仓库(OpenSpec)
- 会跑场景的引擎(Cucumber-JVM + JUnit5)
- 会出漂亮报告的插件(Allure)
下次只要改一行需求描述,再跑一遍相同命令,新代码、新测试、新报告全自动产出!
我们再来看看配合claude skill和subagent来做到更高效的自动化:
结论先行
- 把「写需求 → 生成 feature → 生成代码 → 跑测试 → 归档」5 个步骤做成 Claude Skill(/slash 命令) 最轻量,小白 10 分钟就能搭好。
- 如果团队并行需求多、还要「同时维护需求文档 + 代码 + 测试」三线,SubAgent 分工 才会显出效率优势;配置时间≈30 min,之后可 5 分钟走完一个完整闭环。
下面给出「Skill 版」与「SubAgent 版」两套完整可复制的教程,按场景直接挑一种落地即可。
A 面:Skill 版(推荐个人 / 小团队)
适合:需求频率 ≤ 3 个/天,单仓库,无复杂审批流。
目标:一条 /bddlogin 命令完成「需求→feature→代码→测试→报告→归档」。
1 一次性安装(2 分钟)
npm i -g claude-code # ≥ 0.9.1
npm i -g @fission-ai/openspec # ≥ 1.4
2 建立 Skill 文件
在项目根建目录 .claude/commands/ 并新建 bddlogin.md:
---
name: /bddlogin
description: 需求一句话→Cucumber-JVM+JUnit5 跑通并归档
arguments:
- name: req
description: 需求描述(中文也行)
required: true
---
# 步骤 1 需求→feature
echo "{{req}}" > .claude/tmp.req
claude-code -p "把 .claude/tmp.req 转成标准 Gherkin,输出到 src/test/resources/features/login.feature"
# 步骤 2 生成 StepDef + 业务代码 + 单测
claude-code -p "按 login.feature 生成:
1. src/test/java/steps/LoginStepDef.java
2. src/main/java/service/LoginService.java
3. src/test/java/service/LoginServiceTest.java
4. 保证 mvn test 能过"
# 步骤 3 运行并出报告
mvn test -Dcucumber.plugin="pretty,html:target/cucumber.html,io.qameta.allure.cucumber7jvm.AllureCucumber7Jvm"
mvn allure:report
# 步骤 4 归档
openspec add .claude/tmp.req
openspec archive login --tag --yes
# 清理
rm .claude/tmp.req
echo "✅ 一条链完成!报告:target/site/allure-maven-plugin/index.html"
3 使用(10 秒)
claude
/bddlogin "用户登录:输入正确用户名 admin 密码 123456 后跳到首页"
15 秒后浏览器自动弹出 Allure 报告,Git 历史里也多了一个 v2025-11-03-login 标签。
4 再扩展
把 login.feature 改成通配 {{feature}}.feature,即可 /bdd xxx 跑任意需求——Skill 文件不变,只换参数。
B 面:SubAgent 版(推荐 5 人+ 团队)
适合:并行需求多、需要「需求 Agent + 代码 Agent + 测试 Agent」同时干活,且有人专职维护规格文档。
1 目录结构(一次建好)
.claude/
├─ agents/
│ ├─ product_manager.md # 负责维护 OpenSpec
│ ├─ cucumber_dev.md # 负责 feature & StepDef
│ └─ tester.md # 负责补充单元测试、CI 脚本
├─ commands/
│ └─ full_bdd.md # 总入口 /fullbdd
└─ settings.json # 自动触发钩子
2 定义三个子代理
product_manager.md(需求 Agent)
# Agent: ProductManager
---
context: 独立维护需求文档,把任何一句话扩展成 OpenSpec 标准提案
---
收到需求后:
1. 生成 `openspec/changes/<需求名>/proposal.md`
2. 输出 `tasks.md` 给下游
cucumber_dev.md(Cucumber 编码 Agent)
# Agent: CucumberDev
---
context: 只关注 Cucumber-JVM + JUnit5 代码生成
---
输入:tasks.md + proposal.md
输出:
- src/test/resources/features/<需求>.feature
- src/test/java/steps/<需求>StepDef.java
- src/main/java/service/<需求>Service.java
- 保证 mvn test 能过
tester.md(测试/CI Agent)
# Agent: Tester
---
context: 补充边界用例、生成 Allure 报告、归档
---
1. 读取 cucumber.json
2. 补充 JUnit5 参数化测试
3. 调用 `mvn allure:report`
4. 执行 `openspec archive <需求> --tag --yes`
3 总入口命令
.claude/commands/fullbdd.md
---
name: /fullbdd
args:
- name: req
required: true
---
# 并行启动三个子代理
@parallel ProductManager,CucumberDev,Tester
# 上游需求
@input ProductManager: "{{req}}"
# 下游自动衔接(Agent 内部用 tasks.md 传递)
Claude Code 会自动:
- 派三个独立上下文窗口 → 互不干扰
- 等 ProductManager 写完 proposal → 自动触发 CucumberDev
- CucumberDev 跑通测试 → 自动触发 Tester 归档 & 出报告
4 使用(30 秒)
claude
/fullbdd "作为管理员,我可以在后台禁用某用户,该用户再次登录时应看到‘账号已停用’提示"
回车后去喝杯咖啡,全过程无人值守。大约 2 分钟浏览器弹出 Allure 报告,Git 上已打好 v2025-11-03-disable-user 标签,OpenSpec 里也归档了完整 proposal + cucumber.json。
5 加速技巧
- 在
.claude/settings.json加钩子,Push 代码后自动跑/fullbdd regression,实现「需求-代码-回归」全夜无人值守。 - 把
cucumber.execution.parallel.enabled=true写进junit-platform.properties,并行后 20 条场景只需 30 秒。
如何选型一句话
- 只想「一句话需求→可运行测试」:用 Skill 10 分钟搞定。
- 还要「多人并行、需求-实现-测试三线并进」:上 SubAgent,一次配置,永久 5 分钟闭环。
照着上面 A/B 面抄作业,你就能把「Claude Code + OpenSpec + Cucumber-JVM + JUnit5」整条链路压成一条命令,开发自测归档一键完成。

浙公网安备 33010602011771号