Skip to content

Tycoon-HJ/CodeWeave

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

CodeWeave

Java 项目架构分析与可视化平台

Java 17+ Spring Boot 3.2 Vue 3.5 TypeScript 6 D3.js 7.9 License


CodeWeave 是一个 Java 项目架构分析工具,能够自动扫描 Java 源代码,提取类之间的继承、实现、依赖和方法调用关系,并通过交互式力导向图进行可视化展示。帮助开发者快速理解复杂项目的架构设计和模块间的依赖关系。

功能特性

代码分析

  • 四种关系识别:自动提取 extendsimplementsdependencymethod call 关系
  • 深度 AST 分析:基于 JavaParser 解析源代码,支持 Java 21 语法
  • 内部类支持:正确处理静态内部类及其引用关系
  • 泛型解析:解析 List<ChartDataset> 等泛型参数中的类型依赖
  • 多模块支持:自动发现 Maven 多模块项目,识别跨模块调用
  • 智能类名解析:处理 import、同包查找、内部类引用等多种解析场景

可视化

  • 交互式力导向图:基于 d3.js 的 Canvas 2D 渲染,支持拖拽、缩放、平移
  • 节点类型区分:类(绿)、接口(蓝)、抽象类(黄)、枚举(橙),内部类带虚线外圈
  • 连线类型区分:实线(extends/dependency)、虚线(implements)、流动动画线(method call)
  • 模块颜色分组:多模块项目自动按模块分配节点颜色
  • 跨模块高亮:跨模块调用以橙色粗线标识
  • 选中聚焦:点击节点高亮关联子图,其余节点变暗
  • 自适应布局:节点数动态调整力参数,避免节点重叠

PlantUML 生成

  • 类图生成:以选中节点为中心,BFS 收集子图,生成标准 PlantUML 类图
  • 时序图生成:生成方法调用时序图,包含激活框和返回箭头
  • 在线预览:实时渲染 PlantUML SVG 预览
  • 导出 .puml:下载 PlantUML 源文件
  • 深度控制:可配置 BFS 深度(1-5 层)控制子图范围
  • 可配置输出:设置中可开关字段/方法显示

其他

  • 目录树浏览:左侧按包结构展示文件树,支持展开折叠和搜索过滤
  • 详情面板:右侧展示选中节点的类型、模块、包名、字段、方法和关系列表
  • 中英文切换:支持中文/英文界面切换
  • 暗色主题:GitHub 风格暗色界面
  • HiDPI 支持:高分辨率屏幕清晰渲染

快速开始

环境要求

依赖 版本
JDK 17+
Maven 3.6+
Node.js 18+
npm 9+

1. 启动后端

# 在项目根目录
mvn spring-boot:run

后端启动后监听 http://localhost:8080

2. 启动前端

# 进入前端目录
cd frontend

# 安装依赖(首次运行)
npm install

# 启动开发服务器
npm run dev

前端开发服务器启动在 http://localhost:5173,API 请求自动代理到后端。

3. 使用

  1. 在浏览器打开 http://localhost:5173
  2. 输入 Java 项目根目录的绝对路径,点击「分析」
  3. 分析完成后,左侧显示文件目录树
  4. 点击「生成关系图」按钮,Canvas 上渲染交互式图谱
  5. 点击任意节点查看详情,右侧面板可生成 PlantUML 图

生产构建

# 构建前端
cd frontend && npm run build

# 构建后端 JAR
cd .. && mvn package -q

# 运行
java -jar target/codeweave-1.0.jar

API 接口

方法 路径 说明
POST /api/analyze 提交分析请求,返回图数据
GET /api/analyze/{id} 获取已缓存的分析结果
GET /api/analyze/{id}/modules 获取模块列表

请求示例

# 分析项目
curl -X POST http://localhost:8080/api/analyze \
  -H "Content-Type: application/json" \
  -d '{"path": "/path/to/java-project"}'

# 指定模块
curl -X POST http://localhost:8080/api/analyze \
  -H "Content-Type: application/json" \
  -d '{"path": "/path/to/java-project", "modules": ["module-a", "module-b"]}'

项目结构

codeweave/
├── pom.xml                              # Maven 构建配置
├── src/main/java/com/codeweave/
│   ├── CodeWeaveApplication.java        # Spring Boot 入口
│   ├── analyzer/
│   │   ├── ProjectScanner.java          # Maven 项目扫描,多模块发现
│   │   ├── ClassAnalyzer.java           # JavaParser AST 分析,关系提取
│   │   ├── ClassInfo.java               # 类元数据
│   │   └── RelationInfo.java            # 关系数据
│   ├── config/
│   │   └── WebConfig.java               # CORS 配置
│   ├── controller/
│   │   └── AnalysisController.java      # REST API 控制器
│   ├── generator/
│   │   ├── GraphData.java               # 构建 d3.js 图数据
│   │   └── HtmlGenerator.java           # 旧版独立 HTML 生成器
│   ├── model/
│   │   ├── AnalysisRequest.java         # 请求模型
│   │   └── AnalysisResponse.java        # 响应模型
│   └── service/
│       └── AnalysisService.java         # 分析服务,结果缓存
│
└── frontend/                            # Vue 3 前端
    ├── src/
    │   ├── api/
    │   │   └── analysis.ts              # API 请求封装
    │   ├── components/
    │   │   ├── graph/
    │   │   │   ├── GraphCanvas.vue      # Canvas 图谱渲染
    │   │   │   ├── GraphLegend.vue      # 图例
    │   │   │   └── PlantUMLModal.vue    # PlantUML 预览弹窗
    │   │   └── layout/
    │   │       ├── AppHeader.vue        # 顶部导航栏
    │   │       ├── FileTree.vue         # 文件树容器
    │   │       ├── FileTreeNode.vue     # 文件树节点
    │   │       └── DetailPanel.vue      # 右侧详情面板
    │   ├── composables/
    │   │   ├── useGraphLayout.ts        # D3 力模拟
    │   │   ├── useGraphInteraction.ts   # 鼠标交互
    │   │   └── useI18n.ts               # 国际化
    │   ├── core/
    │   │   ├── renderer.ts              # Canvas 绘制函数
    │   │   ├── hitTest.ts               # 四叉树命中检测
    │   │   ├── linkBatches.ts           # 连线批处理
    │   │   ├── plantuml.ts              # PlantUML 生成
    │   │   └── viewport.ts              # 视口工具
    │   ├── router/
    │   │   └── index.ts                 # 路由配置
    │   ├── stores/
    │   │   ├── graph.ts                 # 图数据状态
    │   │   ├── settings.ts              # 设置状态
    │   │   └── ui.ts                    # UI 状态
    │   ├── styles/
    │   │   ├── variables.scss           # 主题变量
    │   │   └── global.scss              # 全局样式
    │   ├── types/
    │   │   └── graph.ts                 # TypeScript 类型定义
    │   └── views/
    │       ├── HomeView.vue             # 首页
    │       ├── ProjectView.vue          # 项目分析页
    │       └── SettingsView.vue         # 设置页
    ├── package.json
    └── vite.config.ts

可视化说明

节点

样式 含义
🟢 绿色圆 普通类
🔵 蓝色圆 接口
🟡 黄色圆 抽象类
🟠 橙色圆 枚举
虚线外圈 内部类

连线

样式 含义
红色实线 + 三角箭头 extends 继承
绿色虚线 + 三角箭头 implements 实现
蓝色实线 + 箭头 dependency 依赖
紫色流动线 + 箭头 method call 方法调用
橙色粗线 跨模块调用

交互操作

操作 效果
鼠标悬停 高亮当前节点及关联节点
鼠标点击 选中节点,右侧显示详情面板
拖拽节点 移动节点位置
滚轮 缩放视图
拖拽空白区域 平移视图

技术栈

后端

技术 用途
Spring Boot 3.2 Web 框架
JavaParser 3.26 Java 源码 AST 解析
Gson 2.11 JSON 序列化
Java 17 运行时

前端

技术 用途
Vue 3.5 UI 框架
TypeScript 6 类型安全
Pinia 3 状态管理
Vue Router 4 路由
D3.js 7.9 力导向图 + 四叉树
Canvas 2D 高性能渲染
plantuml-encoder PlantUML 编码
Vite 8 构建工具
Sass 样式预处理

性能优化

针对大型项目(800+ 节点、2500+ 链接)的渲染优化:

  • Dirty-flag 渲染:只在状态变化时重绘,空闲时停止渲染循环
  • 视口裁剪:跳过屏幕外元素的绘制调用
  • 预分区批处理:链接按类型预分组,减少 Canvas 状态切换
  • 四叉树命中检测:O(log n) 节点查找
  • 邻接表缓存:预构建邻接表加速 BFS 和关联查询
  • 流速分组:流动动画按速度值分组,减少 lineDashOffset 状态变更
  • 自适应力参数:根据节点数动态调整链接距离、斥力强度、碰撞半径

许可证

MIT

About

代码关系图展示/CodeWeave

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors