Java代码审查工具

一个基于MCP协议的自动化Java代码审查服务器,支持JDK 17/21项目的全面分析,包括代码风格检查、安全漏洞检测、架构验证和JBCT方法学合规性检查。

  • by kzoabi
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 kzoabi/java-code-review-mcp

使用说明

Java代码审查MCP服务器

MCP(模型上下文协议)服务器,充当 高级软件开发工程师 拥有超过15年的自动化代码审查经验。专为 JDK 17/21 具有完整Spring Boot支持和JBCT方法合规性检查的项目。与集成 开源代码, 克劳德代码,以及 克劳德桌面版.

特性

代码审查能力

  • 单文件审核 --使用可配置的审阅级别分析单个Java文件
  • Git差异评论 --审查未提交的更改、阶段性更改或任何git ref范围
  • 完整项目评审 --项目范围的分析,包括一次调用中的依赖性和架构检查
  • JBCT合规性 --37规则Java后端编码技术方法验证
  • 弹簧靴合规性 --涵盖春季常见陷阱的6条规则
  • 文件结果缓存 --在重复的项目运行中跳过未更改的文件(按mtime键控)

静态分析(纯Python)

  • 代码样式检查(行长、缩进)
  • 设计模式验证
  • 安全漏洞检测(硬编码凭据、SQL注入、敏感日志)
  • 性能优化建议

JDK 17+功能检测

  • 不可变DTO的记录
  • 受控继承的密封类
  • 图案匹配(instanceof)
  • 切换表达式
  • 文本块
  • var 关键字用法

Java 21功能检测

  • 虚拟线程(Thread.ofVirtual())
  • 结构化并发(StructuredTaskScope)
  • 字符串模板

多模块Maven/Gradle支持

  • 步行全部 pom.xml 和 build.gradle 项目树中的文件
  • 聚合模块之间的依赖关系
  • 检测跨模块版本冲突

审查级别

  • full --所有检查(默认)
  • quick --仅严重和重大严重程度;跳过样式、JDK建议、JBCT样式/命名
  • security --仅限安全检查;没有JBCT,没有JDK建议

增强报告

  • 目录(当报告有≥3节时)
  • 带有表情符号严重程度指示器的摘要仪表板
  • 前5个最有问题的文件
  • 按严重程度和文件分组的问题
  • 架构报告的层依赖矩阵

体系结构分析

  • 包结构验证(域/适配器/用例层)
  • 循环依赖检测
  • 导入流验证(域不得导入适配器)
  • 自动包含在 review_java_project --无需单独通话

需求

  • Python 3.10+
  • Git(用于Git diff评论)

安装

# Clone or download this repository
cd java-code-review-mcp

# Create virtual environment
python -m venv .venv

# Activate (Linux/Mac)
source .venv/bin/activate

# Activate (Windows)
.venv\Scripts\activate

# Install dependencies
pip install -r requirements.txt

或者使用紫外线:

uv venv
uv add "mcp[cli]" fastmcp javalang rich pyyaml

配置

编辑 config/code_review_config.md (或通过以下方式加载的YAML文件 load_custom_config)自定义:

编码风格和阈值

max_line_length: 120
indent_size: 4
use_spaces: true
max_method_length: 30
max_class_length: 500
max_parameters: 5

安全检查

security:
  check_hardcoded_secrets: true
  check_sql_injection: true
  check_logging_sensitive: true

JDK 17+功能建议

jdk17_features:
  recommend_records: true
  recommend_sealed_classes: true
  recommend_switch_expressions: true
  recommend_text_blocks: true
  recommend_var_keyword: true
  recommend_pattern_matching: true

Java 21功能推荐

jdk21_features:
  recommend_virtual_threads: true
  recommend_structured_concurrency: true
  recommend_string_templates: true

弹簧靴分析

弹簧分析 默认情况下禁用 以避免非Spring项目的误报。

spring_enabled: true   # Enable Spring Boot rule checks

spring_rules:
  transactional: true        # SPRING-TX-01
  field_injection: true      # SPRING-DI-01
  circular_autowired: true   # SPRING-DI-02
  missing_stereotype: true   # SPRING-STEREO-01
  rest_return_types: true    # SPRING-REST-01
  value_fallback: true       # SPRING-CONFIG-01

JBCT配置文件设置

jbct_profile: basic   # disabled | basic | full

jbct_rules:
  return_types: true      # RET-01 to RET-05
  exceptions: true        # EX-01, EX-02
  value_objects: true     # VO-01, VO-02
  lambda_rules: true      # LAM-01, LAM-02, LAM-03, NEST-01
  patterns: true          # PAT-01, PAT-02, SEQ-01
  architecture: true      # MIX-01
  naming: true            # NAM-01, NAM-02, ACR-01
  zones: true             # ZONE-01, ZONE-02, ZONE-03
  style: true             # STY-01 to STY-06
  logging: true           # LOG-01, LOG-02
  static_imports: true    # STATIC-01
  utilities: true         # UTIL-01, UTIL-02
  sealed_types: true      # SEAL-01
  usecase: true           # UC-01

配置文件级别:

  • disabled --无JBCT检查
  • basic --核心12条规则(返回类型、异常、值对象、lambdas、模式、架构、命名、区域)
  • full --所有37条JBCT规则

包装图案

jbct_packages:
  domain_patterns:
    - "**.domain.**"
    - "**.usecase.**"
  adapter_patterns:
    - "**.adapter.**"
    - "**.io.**"

区域动词

zone2_verbs:
  - validate
  - process
  - handle
  - execute

zone3_verbs:
  - get
  - fetch
  - parse
  - load

运行服务器

# With Python
python src/server.py

# With uv
uv run python src/server.py

服务器使用 JAVA_REVIEW_CONFIG 用于定位自定义配置文件的环境变量:

JAVA_REVIEW_CONFIG=/path/to/config.yaml python src/server.py

MCP工具参考

工具摘要

工具 关键参数 说明
review_java_file file_path, output_format, review_level 查看单个Java文件
review_java_git_diff repo_path, output_format, review_level, ref, staged 查看git diff(未提交、暂存或任何引用)
review_java_project project_path, output_format, review_level, include_deps, use_cache 包括架构在内的全面项目审查
analyze_java_static file_path, tools 单个文件的低级静态分析
analyze_java_dependencies project_path, build_tool Maven/Gradle多模块依赖性分析
analyze_java_architecture project_path, output_format 使用层矩阵进行架构验证
analyze_spring_compliance file_path, output_format Spring Boot/Spring Framework规则检查
review_jbct_compliance file_path, output_format, profile JBCT方法合规性(文件或目录)
get_review_checklist checklist_type 检索审查清单
get_current_config -- 显示活动配置
get_jbct_config -- 显示JBCT特定配置
load_custom_config config_path 加载YAML或Markdown配置文件

review_java_file

查看单个Java文件以了解样式、安全性、设计和JDK现代化问题。

参数 类型 默认值 说明
file_path string 必填 路径 .java 文件
output_format 字符串 "markdown" markdown, json, sarif,或 both
review_level 字符串 "full" full, quick,或 security

review_java_git_diff

从git查看Java更改。默认情况下,审核未记录的更改(git diff).

参数 类型 默认值 说明
repo_path 字符串 "." git存储库根路径
output_format 字符串 "markdown" markdown, json, sarif,或 both
review_level 字符串 "full" full, quick,或 security
ref 字符串 "" 与git ref进行比较(例如。 HEAD~1, main,提交SHA)。相互排斥 staged.
staged 布尔值 false 何时 true,仅审查阶段性更改(git diff --cached)

review_java_project

查看整个Java项目。自动包括架构分析和(可选)依赖性分析。

参数 类型 默认值 说明
project_path string 必需 Java项目根目录的路径
output_format 字符串 "markdown" markdown, json, sarif,或 both
review_level 字符串 "full" full, quick,或 security
include_deps 布尔值 true 分析Maven/Gradle依赖关系
use_cache 布尔值 true 缓存每个文件的结果(按路径+mtime键控);重新运行时跳过未更改的文件

analyze_java_static

对单个Java文件运行低级静态分析。

参数 类型 默认值 说明
file_path string 必填 路径 .java 文件
tools 字符串 "all" 要运行哪些检查

analyze_java_dependencies

分析Maven或Gradle依赖关系。支持多模块项目——遍历所有项目的完整项目树 pom.xml / build.gradle 文件并检测跨模块版本冲突。

参数 类型 默认值 说明
project_path string 必需 Java项目根目录的路径
build_tool 字符串 "auto" auto, maven,或 gradle

analyze_java_architecture

验证项目架构:包结构、循环依赖检测和导入流(域不得导入适配器)。还生成层依赖矩阵。

参数 类型 默认值 说明
project_path string 必需 Java项目目录的路径
output_format 字符串 "markdown" markdown, json,或 sarif

注: review_java_project 自动调用它——你只需要 analyze_java_architecture 直接用于架构分析。


analyze_spring_compliance

检查Java文件或项目目录中的Spring Boot/Spring Framework问题。需要 spring_enabled: true 在配置中,规则将被触发。

参数 类型 默认值 说明
file_path string 必填 路径 .java 文件或项目目录
output_format 字符串 "markdown" markdown, json,或 sarif

review_jbct_compliance

检查Java文件或目录是否符合JBCT方法。

参数 类型 默认值 说明
file_path string 必填 路径 .java 文件或项目目录
output_format 字符串 "markdown" markdown, json,或 sarif
profile 字符串 "basic" basic (12条核心规则)或 full (共37条规则)

get_review_checklist

检索代码审查清单。

参数 类型 默认值 说明
checklist_type 字符串 "full" full 或 quick

load_custom_config

在运行时加载YAML或Markdown配置文件。

参数 类型 默认值 说明
config_path string 必填 路径 .yaml, .yml,或 .md 配置文件

输出格式

报告可以在以下位置生成:

格式 描述
markdown 人类可读(默认)
json CI/CD管道的机器可读性
sarif GitHub代码扫描、Azure DevOps等行业标准。
both Markdown+JSON组合

审查级别

级别 检查什么
full 一切——风格、设计、安全性、JDK建议、JBCT(所有严重性)
quick 仅限于关键和重大严重性问题;跳过样式规则、JDK建议和JBCT样式/命名规则
security 仅安全类别(HardcodedCredentials, SQLInjection);没有JBCT,没有JDK建议

MCP资源

服务器公开了三个可通过MCP资源URI访问的只读资源:

URI 描述
checklist://full JSON格式的完整代码审查清单
checklist://quick JSON格式的快速检查表
config://current 活动配置为JSON

整合

开源代码

添加到您的项目 opencode.json:

{
  "mcp": {
    "java-code-review": {
      "type": "local",
      "command": ["python", "path/to/java-code-review-mcp/src/server.py"],
      "enabled": true
    }
  }
}

示例提示:

Review the Java file src/main/java/com/example/MyService.java
Check this file for JBCT compliance: src/main/java/com/example/MyService.java
Do a full code review of this project
Run JBCT compliance check on the src/main/java directory
Analyze Spring Boot issues in this project
Show me the current code review configuration

克劳德代码

添加 ~/.claude/claude_desktop_config.json (或通过 claude mcp add):

{
  "mcpServers": {
    "java-code-review": {
      "command": "python",
      "args": ["path/to/java-code-review-mcp/src/server.py"]
    }
  }
}

示例提示:

Review this Java file for issues
Review my uncommitted Java changes
Run a quick review of the project (critical issues only)
Check for Spring Boot problems in src/main/java
Run JBCT compliance check on this directory
What JBCT rules are enabled?
Show the current config

克劳德桌面版

添加 %APPDATA%\Claude\claude_desktop_config.json:

{
  "mcpServers": {
    "java-code-review": {
      "command": "python",
      "args": ["path/to/java-code-review-mcp/src/server.py"]
    }
  }
}

JBCT方法

服务器包括 Java后端编码技术 合规性检查——一种编写可预测、可测试的Java后端代码的方法。特别适用于人工智能辅助开发。

什么是JBCT?

JBCT提供了以下机械规则:

  • 返回类型:每个方法返回以下之一 T, Option<T>, Result<T>,或 Promise<T>
  • 错误处理:使用 Cause 随着 Result/Promise,没有例外
  • 值对象:工厂方法返回 Result<T>
  • Lambda规则:lambdas中没有复杂的逻辑
  • 建筑:域包中没有I/O
  • 命名:工厂和验证的一致惯例

JBCT规则(共37条)

退货类型(5条规则)

规则 严重性 描述
JBCT-RET-01 错误 业务方法必须使用T、Option、Result或Promise
JBCT-RET-02 错误 没有嵌套包装(Promise<Result<T>>, Option<Option<T>>)
JBCT-RET-03 错误 从不返回null--使用 Option<T>
JBCT-RET-04 警告 使用 Unit 而不是 Void
JBCT-RET-05 警告 避免总是连续的结果(直接返回T)

例外情况(2条规则)

规则 严重性 描述
JBCT-EX-01 错误 无业务异常——使用带结果/承诺的原因
JBCT-EX-02 错误 不使用 orElseThrow() --使用结果/选项

值对象(2条规则)

规则 严重性 描述
JBCT-VO-01 警告 值对象应返回出厂 Result<T>
JBCT-VO-02 警告 不要绕过工厂——使用工厂方法

Lambda(4条规则)

规则 严重性 描述
JBCT-LAM-01 警告 lambdas中没有复杂的逻辑(if、switch、try-catch)
JBCT-LAM-02 警告 lambdas中没有括号——方法摘要
JBCT-LAM-03 警告 lambdas中没有三元函数——使用 filter() 或提取物
JBCT-NEST-01 警告 lambda中没有嵌套的一元运算

模式(3条规则)

规则 严重性 描述
JBCT-PAT-01 警告 使用函数迭代而不是原始循环
JBCT-PAT-02 警告 测序仪内无叉连接
JBCT-SEQ-01 警告 链条长度限制(2-5步)

架构(1条规则)

规则 严重性 描述
JBCT-MIX-01 错误 域包中没有I/O操作

命名(3条规则)

规则 严重性 描述
JBCT-NAM-01 警告 工厂方法: TypeName.typeName()
JBCT-NAM-02 警告 使用 Valid 前缀,不是 Validated
JBCT-ACR-01 警告 首字母缩略词应使用PascalCase

区域(3条规则)

规则 严重性 描述
JBCT-ZONE-01 警告 步骤界面使用区域2动词
JBCT-ZONE-02 警告 叶子函数使用区域3动词
JBCT-ZONE-03 警告 测序仪链中无区域混合

风格(6条规则)

规则 严重性 描述
JBCT-STY-01 警告 首选流畅失败: cause.result()
JBCT-STY-02 警告 首选构造函数引用: X::new
JBCT-STY-03 警告 代码中没有完全限定的类名
JBCT-STY-04 警告 实用类模式:密封接口
JBCT-STY-05 警告 方法引用比lambda更可取
JBCT-STY-06 警告 导入顺序:java→ javax→ 实用主义→ 第三方的→ 项目

日志记录(2条规则)

规则 严重性 描述
JBCT-LOG-01 警告 无条件记录
JBCT-LOG-02 警告 没有记录器作为方法参数

其他规则(5条规则)

规则 严重性 描述
JBCT-STATIC-01 警告 Pragmatica更喜欢静态导入
JBCT-UTIL-01 警告 使用Pragmatic解析实用程序
JBCT-UTIL-02 警告 使用 Verify.Is 谓词
JBCT-SEAL-01 警告 错误接口应密封
JBCT-UC-01 警告 用例工厂返回lambdas

弹簧靴支架

这 analyze_spring_compliance 工具(和 spring_enabled config标志)添加Spring特定的检查。启用 spring_enabled: true 在您的配置中。

春季规则(6条规则)

规则 严重性 描述
春季-TX-01 主要 @Transactional 在非公共方法上——Spring代理无法拦截它
SPRING-DI-01 主要 @Autowired 现场注入——首选构造函数注入
SPRING-DI-02 major 类似乎注入了自己——可能是循环依赖
春夏01 轻微 缺失 @Service/@Repository/@Component 论服务型班级
春红01 小调 @RestController 方法返回原始类型,而不是 ResponseEntity
春季音乐会-01 小调 @Value 硬编码回退掩码缺少配置属性

快速开始

# config/code_review_config.md (or your YAML config)
spring_enabled: true

然后在你的AI助手中:

Analyze Spring Boot issues in src/main/java/com/example/

体系结构分析

这 analyze_java_architecture 工具(以及自动架构步骤) review_java_project)执行:

  1. 包装结构验证 --检查域、适配器和用例层
  2. 循环依赖检测 --查找包之间的循环导入并显示循环路径
  3. 导入流验证 --确保域包不导入适配器包
  4. 层依赖关系矩阵 --呈现一个层×层表,显示允许/违反的依赖关系

用法

直接调用仅架构分析:

Analyze the architecture of this Java project
Check for circular dependencies in the codebase

或者将其作为完整项目审查的一部分自动获取:

Do a full code review of this Java project

CI/CD:SARIF输出

GitHub操作

name: Java Code Review

on: [pull_request]

jobs:
  review:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Set up Python
        uses: actions/setup-python@v5
        with:
          python-version: '3.11'
      - name: Install dependencies
        run: pip install -r requirements.txt
      - name: Run JBCT Check
        run: |
          python -c "
          from src.tools.code_review import review_jbct_project
          from src.tools.report_generator import generate_report
          from src.config.loader import load_config, get_config
          import asyncio

          load_config()
          config = get_config()
          config['jbct_profile'] = 'basic'

          result = asyncio.run(review_jbct_project('src/main/java', config))
          print(generate_report(result, 'sarif'))
          " > results.sarif
      - name: Upload SARIF
        uses: github/codeql-action/upload-sarif@v3
        with:
          sarif_file: results.sarif

Azure DevOps

在您的管道中配置SARIF结果以进行安全扫描集成。


测试

该项目包括一个测试套件,包含6个模块的61个测试。

运行测试

# Quick summary
python -m pytest tests/ -q

# Verbose with test names
python -m pytest tests/ -v

# Single module
python -m pytest tests/test_spring_analyzer.py -v

测试模块

模块 覆盖范围
test_static_analysis.py 静态分析规则、JDK 17/21建议、安全检查
test_jbct_analyzer.py 所有37条JBCT规则
test_dependency_analyzer.py Maven/Gradle多模块解析,版本冲突检测
test_git_diff_parser.py Git差异解析、引用和暂存模式
test_spring_analyzer.py 全部6条春季规则
test_code_review.py 端到端编排(review_file、review_project、缓存)

测试夹具在 tests/fixtures/ (例如。, SecurityIssues.java, JbctViolations.java, SpringIssues.java).


许可证

MIT许可证