Java 项目架构分析与可视化平台
CodeWeave 是一个 Java 项目架构分析工具,能够自动扫描 Java 源代码,提取类之间的继承、实现、依赖和方法调用关系,并通过交互式力导向图进行可视化展示。帮助开发者快速理解复杂项目的架构设计和模块间的依赖关系。
- 四种关系识别:自动提取
extends、implements、dependency、method call 关系
- 深度 AST 分析:基于 JavaParser 解析源代码,支持 Java 21 语法
- 内部类支持:正确处理静态内部类及其引用关系
- 泛型解析:解析
List<ChartDataset> 等泛型参数中的类型依赖
- 多模块支持:自动发现 Maven 多模块项目,识别跨模块调用
- 智能类名解析:处理 import、同包查找、内部类引用等多种解析场景
- 交互式力导向图:基于 d3.js 的 Canvas 2D 渲染,支持拖拽、缩放、平移
- 节点类型区分:类(绿)、接口(蓝)、抽象类(黄)、枚举(橙),内部类带虚线外圈
- 连线类型区分:实线(extends/dependency)、虚线(implements)、流动动画线(method call)
- 模块颜色分组:多模块项目自动按模块分配节点颜色
- 跨模块高亮:跨模块调用以橙色粗线标识
- 选中聚焦:点击节点高亮关联子图,其余节点变暗
- 自适应布局:节点数动态调整力参数,避免节点重叠
- 类图生成:以选中节点为中心,BFS 收集子图,生成标准 PlantUML 类图
- 时序图生成:生成方法调用时序图,包含激活框和返回箭头
- 在线预览:实时渲染 PlantUML SVG 预览
- 导出 .puml:下载 PlantUML 源文件
- 深度控制:可配置 BFS 深度(1-5 层)控制子图范围
- 可配置输出:设置中可开关字段/方法显示
- 目录树浏览:左侧按包结构展示文件树,支持展开折叠和搜索过滤
- 详情面板:右侧展示选中节点的类型、模块、包名、字段、方法和关系列表
- 中英文切换:支持中文/英文界面切换
- 暗色主题:GitHub 风格暗色界面
- HiDPI 支持:高分辨率屏幕清晰渲染
| 依赖 |
版本 |
| JDK |
17+ |
| Maven |
3.6+ |
| Node.js |
18+ |
| npm |
9+ |
# 在项目根目录
mvn spring-boot:run
后端启动后监听 http://localhost:8080。
# 进入前端目录
cd frontend
# 安装依赖(首次运行)
npm install
# 启动开发服务器
npm run dev
前端开发服务器启动在 http://localhost:5173,API 请求自动代理到后端。
- 在浏览器打开
http://localhost:5173
- 输入 Java 项目根目录的绝对路径,点击「分析」
- 分析完成后,左侧显示文件目录树
- 点击「生成关系图」按钮,Canvas 上渲染交互式图谱
- 点击任意节点查看详情,右侧面板可生成 PlantUML 图
# 构建前端
cd frontend && npm run build
# 构建后端 JAR
cd .. && mvn package -q
# 运行
java -jar target/codeweave-1.0.jar
| 方法 |
路径 |
说明 |
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