当前位置: 首页 > news >正文

Harness Engineering 实战四:Java 项目的 Harness 层写在哪?附完整Demo

01

先看目录结构

一个标准的 Java AI Harness 工程,长这样:

harness-java-demo/ ├── AGENTS.md # 约束层:Java/Spring 专属红线 ├── .pre-commit-config.yaml # 校验层:提交前快速拦截 ├── config/ │ └── harness.yaml # 执行层:JVM 沙盒/内存/命令限制 ├── .github/ │ └── workflows/ │ └── ai-check.yml # 监控层:CI 强制跑测试与覆盖率 ├── scripts/ │ └── check_ai_code.sh # 轻量级 Java 正则校验脚本 ├── pom.xml # Maven 依赖与插件 ├── src/main/java/... # Spring Boot 3.x 业务代码 └── src/test/java/... # JUnit 5 测试用例

别嫌多。 每一层,都在替你挡一个线上故障。


02

让我们来逐层拆解

层一:约束层(AGENTS.md)

放哪: 项目根目录。

作用: AI 启动时自动读取,定义 Java/Spring 专属红线。

# AGENTS.md ## Context 你正在开发 Spring Boot 3.2+ 用户注册服务。 ## Java/Spring Constraints (红线) 1. 包名规范:必须使用 jakarta.*,禁止 javax.*(Spring Boot 3 已全面迁移)。 2. 参数校验:Controller 入参必须加 @Valid,DTO 字段必须加 @NotBlank/@Email。 3. 事务管理:涉及写操作的方法必须显式声明 @Transactional(rollbackFor = Exception.class)。 4. 日志规范:禁止 System.out.println。必须使用 @Slf4j 或 LoggerFactory。 5. 密码安全:绝对禁止明文存储!必须使用 BCryptPasswordEncoder。

层二:校验层(.pre-commit-config.yaml)

放哪: 项目根目录。

作用: git commit 时,快速拦截 AI 幻觉代码。

repos: - repo: local hooks: - id: java-harness-fast-check name: Java AI 代码快速校验 entry: bash scripts/check_ai_code.sh language: system types: [java]

💡 为什么不用 Maven 跑 pre-commit?

mvn checkstyle:check 启动 JVM 太慢(通常 3-5 秒)。pre-commit 需要毫秒级响应。

解法: 用轻量 Shell 脚本做正则拦截,重型检查(Checkstyle/SpotBugs)交给 CI。

层三:执行层(config/harness.yaml)

放哪: config/ 目录。

作用: 限制 AI Agent 的 JVM 参数与危险命令。

agent: jvm: max_heap_size: "512m" blocked_packages: - java.lang.Runtime - java.lang.ProcessBuilder allowed_paths: - ./src - ./target - ./logs limits: max_tokens_per_request: 8192 timeout_seconds: 45 max_file_edits_per_session: 10

层四:监控层(.github/workflows/ai-check.yml)

放哪: .github/workflows/。

作用: PR 合并前,CI 强制跑完整测试与覆盖率。不达标,不准合入。

name: Java AI Harness Check on: [pull_request] jobs: validate: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Set up JDK 17 uses: actions/setup-java@v4 with: { java-version: '17', distribution: 'temurin' } - name: Cache Maven uses: actions/cache@v4 with: path: ~/.m2/repository key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} - name: Build & Test run: mvn clean verify jacoco:report

03

怎么跑起来?(3 步)

1.环境准备

确保已安装Java 17+、Maven 3.9+ 和 Git。

💡 IDE 提示:请在 IntelliJ IDEA/Eclipse 中安装 Lombok 插件/或者pom引入Lombok,否则 @Data 等注解会报错。

2.挂载 Hook(两种姿势任选)

  • 姿势 A(推荐,毫秒级拦截):

使用pre-commit 框架(Java 大厂项目标配,管理 Hooks 最方便):

pip install pre-commit pre-commit install
  • 姿势 B(纯 Java 极简,免 Python):

不想装Python?直接把脚本复制到 Git 目录:

# Mac/Linux/Git Bash cp scripts/check_ai_code.sh .git/hooks/pre-commit chmod +x .git/hooks/pre-commit

3.让 AI 生成代码 & 提交拦截

正常写业务。提交时:

git add . git commit -m "feat: add user registration" # 若违反约束(如明文存密码),脚本直接阻断。

⚠️ Windows 用户注意:运行 Shell 脚本需使用 Git Bash 或 WSL 终端,CMD/PowerShell 默认不支持。


04

踩过的 3 个坑

坑 1:Maven 编译慢,CI 超时

AI 生成代码后,CI 每次全量编译耗时 2-3 分钟。

解法: 开启 Maven 并行编译 mvn clean verify -T 1C,并配置 actions/cache 缓存 ~/.m2/repository。耗时压到 40 秒内。

坑 2:AI 乱加 @Autowired 字段注入

Spring 官方推荐构造器注入,但 AI 默认生成字段注入。

解法: 在 AGENTS.md 加一条:禁止字段注入,必须使用构造器注入或 @RequiredArgsConstructor。 配合 IDE 插件自动转换。

坑 3:Jacoco 覆盖率不达标

AI 生成的测试经常漏边界值,导致 CI 标红。

解法: 在 pom.xml 配置 Jacoco 规则,强制要求核心 Service 覆盖率 ≥80%。不达标直接 BUILD FAILURE。


05

Java 不是包袱,是底线。

你给它的边界越清晰,它给你的惊喜就越大。

别指望一句“帮我写个 Spring Boot 接口”就能搞定一切。

把约束写进文件,把校验交给流水线,把合并权握在自己手里。

http://www.jsqmd.com/news/658528/

相关文章:

  • 消防主机组网通信质量有担忧?巧用光纤环网冗余方案,实现超远距离、高可靠CAN通讯
  • 长代码生成为何频频崩溃?揭秘LLM在1000+行函数中的5个隐性失效点
  • 别只做标题党了!我用扣子AI智能体,把公众号爆款标题的9种套路都做成了自动化模板
  • g4f提供的模型调用:python JavaScript和curl
  • 2026年质量好的陕西消防器材/西安消防器材优质厂家推荐榜 - 品牌宣传支持者
  • UE4材质性能优化笔记:一张贴图搞定树叶的粗糙度、透光和AO(附节点详解)
  • 【SITS2026实战白皮书】:大厂AI编程工具落地路径、踩坑清单与ROI量化报告(仅内部流出3份)
  • 避开这些坑:Syncthing局域网单向同步的完整配置流程与防火墙设置详解
  • python changes
  • 2026年3月揭晓:含电气AI软件系统的能源管理系统EMS有哪些,高低压配电柜安装,电气AI软件系统供应商口碑推荐 - 品牌推荐师
  • 伺服系统三环增益调优:从理论公式到实践步骤
  • ESP32-S3 智能农业监测与自动灌溉系统:从硬件选型到云端部署全解析
  • 小白从零开始学渗透:8 个核心步骤直接上手
  • Sunshine游戏串流终极指南:15分钟打造你的跨设备游戏天堂
  • 新能源汽车电池包液冷流道流动与传热的数值优化
  • Excel公式美化神器:3分钟让复杂公式变清晰,工作效率提升300%
  • 全网最通俗:什么是网络安全,为何人人都要重视
  • 大模型API网关缓存预热失效真相,3个被忽视的上下文依赖因子正在 silently 拖垮你的P99延迟
  • C# OnnxRuntime 部署 DDColor
  • C++14的[[deprecated]]属性怎么用?手把手教你优雅地标记过时代码(附自定义警告信息)
  • 基于Kotti-py312这个项目,帮我写一个AI 交流网站。先帮我规划一下!我的诉求是能实现AI资源的互助,大家互相帮着找点子,一起落地实践!
  • SITS2026 AI配置生成器深度拆解:从YAML Schema解析到动态策略注入的7步工业级落地流程
  • 网安入门必看!2026 BurpSuite 安装图文教程 + 安全测试合集
  • # 发散创新:用Python+PyTorch实现神经渲染中的隐式表示建模与可视化在计算机图形学和视觉理解领域,**神经渲染
  • 从玩具车到AGV:手把手教你用ARUCO二维码给ROS机器人做个简易‘路标’定位系统
  • LVGL Spinner控件实战:5分钟搞定3种酷炫加载动画(附ESP32/STM32代码)
  • 3分钟快速上手:Element UI中国省市区级联数据(element-china-area-data)完全指南
  • Echarts中国地图进阶:利用visualMap组件实现数据驱动的省份色彩渲染
  • 别等2026!现在就该部署AI正则生成沙箱环境:3个零依赖Docker镜像+自动审计日志模板
  • 从入门到实战:rkhunter(Rootkit猎手)在Linux服务器安全运维中的部署与自动化监控