java-class-analyzer-mcp-server 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,235 @@
1
+ import { exec } from 'child_process';
2
+ import { promisify } from 'util';
3
+ import fs from 'fs-extra';
4
+ import * as path from 'path';
5
+ import { parseString } from 'xml2js';
6
+ import * as yauzl from 'yauzl';
7
+ const execAsync = promisify(exec);
8
+ const parseXmlAsync = promisify(parseString);
9
+ export class DependencyScanner {
10
+ indexCache = new Map();
11
+ /**
12
+ * 扫描Maven项目的所有依赖,建立类名到JAR包的映射索引
13
+ */
14
+ async scanProject(projectPath, forceRefresh = false) {
15
+ const indexPath = path.join(projectPath, '.mcp-class-index.json');
16
+ const isDebug = process.env.NODE_ENV === 'development';
17
+ // 如果强制刷新,先删除旧的索引文件
18
+ if (forceRefresh && await fs.pathExists(indexPath)) {
19
+ if (isDebug) {
20
+ console.error('强制刷新:删除旧的索引文件');
21
+ }
22
+ await fs.remove(indexPath);
23
+ }
24
+ // 检查缓存
25
+ if (!forceRefresh && await fs.pathExists(indexPath)) {
26
+ if (isDebug) {
27
+ console.error('使用缓存的类索引');
28
+ }
29
+ const cachedIndex = await fs.readJson(indexPath);
30
+ return {
31
+ jarCount: cachedIndex.jarCount,
32
+ classCount: cachedIndex.classCount,
33
+ indexPath,
34
+ sampleEntries: cachedIndex.sampleEntries
35
+ };
36
+ }
37
+ if (isDebug) {
38
+ console.error('开始扫描Maven依赖...');
39
+ }
40
+ // 1. 获取Maven依赖树
41
+ const dependencies = await this.getMavenDependencies(projectPath);
42
+ console.error(`找到 ${dependencies.length} 个依赖JAR包`);
43
+ // 2. 解析每个JAR包,建立类索引
44
+ const classIndex = [];
45
+ let processedJars = 0;
46
+ for (const jarPath of dependencies) {
47
+ try {
48
+ const classes = await this.extractClassesFromJar(jarPath);
49
+ classIndex.push(...classes);
50
+ processedJars++;
51
+ if (processedJars % 10 === 0) {
52
+ console.error(`已处理 ${processedJars}/${dependencies.length} 个JAR包`);
53
+ }
54
+ }
55
+ catch (error) {
56
+ console.warn(`处理JAR包失败: ${jarPath}, 错误: ${error}`);
57
+ }
58
+ }
59
+ // 3. 保存索引到文件
60
+ const result = {
61
+ jarCount: processedJars,
62
+ classCount: classIndex.length,
63
+ indexPath,
64
+ sampleEntries: classIndex.slice(0, 10).map(entry => `${entry.className} -> ${path.basename(entry.jarPath)}`)
65
+ };
66
+ await fs.outputJson(indexPath, {
67
+ ...result,
68
+ classIndex,
69
+ lastUpdated: new Date().toISOString()
70
+ }, { spaces: 2 });
71
+ console.error(`扫描完成!处理了 ${processedJars} 个JAR包,索引了 ${classIndex.length} 个类`);
72
+ return result;
73
+ }
74
+ /**
75
+ * 获取Maven依赖树中的所有JAR包路径
76
+ */
77
+ async getMavenDependencies(projectPath) {
78
+ try {
79
+ // 构建Maven命令路径
80
+ const mavenCmd = this.getMavenCommand();
81
+ // 执行 mvn dependency:tree 命令
82
+ const { stdout } = await execAsync(`${mavenCmd} dependency:tree -DoutputType=text`, {
83
+ cwd: projectPath,
84
+ timeout: 60000 // 60秒超时
85
+ });
86
+ // 解析输出,提取JAR包路径
87
+ const jarPaths = new Set();
88
+ const lines = stdout.split('\n');
89
+ for (const line of lines) {
90
+ // 匹配类似这样的行: [INFO] +- com.example:my-lib:jar:1.0.0:compile
91
+ const match = line.match(/\[INFO\].*?([a-zA-Z0-9._-]+:[a-zA-Z0-9._-]+:[a-zA-Z0-9._-]+:[a-zA-Z0-9._-]+:[a-zA-Z0-9._-]+)/);
92
+ if (match) {
93
+ const dependency = match[1];
94
+ // 构建JAR包路径
95
+ const jarPath = await this.resolveJarPath(dependency, projectPath);
96
+ if (jarPath && await fs.pathExists(jarPath)) {
97
+ jarPaths.add(jarPath);
98
+ }
99
+ }
100
+ }
101
+ return Array.from(jarPaths);
102
+ }
103
+ catch (error) {
104
+ console.error('获取Maven依赖失败:', error);
105
+ // 如果Maven命令失败,尝试从本地仓库扫描
106
+ return await this.scanLocalMavenRepo(projectPath);
107
+ }
108
+ }
109
+ /**
110
+ * 从本地Maven仓库扫描JAR包
111
+ */
112
+ async scanLocalMavenRepo(projectPath) {
113
+ const mavenRepoPath = this.getMavenRepositoryPath();
114
+ if (!await fs.pathExists(mavenRepoPath)) {
115
+ throw new Error('Maven本地仓库不存在');
116
+ }
117
+ const jarFiles = [];
118
+ const scanDir = async (dir) => {
119
+ const entries = await fs.readdir(dir, { withFileTypes: true });
120
+ for (const entry of entries) {
121
+ const fullPath = path.join(dir, entry.name);
122
+ if (entry.isDirectory()) {
123
+ await scanDir(fullPath);
124
+ }
125
+ else if (entry.isFile() && entry.name.endsWith('.jar')) {
126
+ jarFiles.push(fullPath);
127
+ }
128
+ }
129
+ };
130
+ await scanDir(mavenRepoPath);
131
+ return jarFiles;
132
+ }
133
+ /**
134
+ * 解析依赖坐标,获取JAR包路径
135
+ */
136
+ async resolveJarPath(dependency, projectPath) {
137
+ const [groupId, artifactId, type, version, scope] = dependency.split(':');
138
+ if (type !== 'jar') {
139
+ return null;
140
+ }
141
+ // 使用统一的Maven仓库路径获取方法
142
+ const mavenRepoPath = this.getMavenRepositoryPath();
143
+ const groupPath = groupId.replace(/\./g, '/');
144
+ const jarPath = path.join(mavenRepoPath, groupPath, artifactId, version, `${artifactId}-${version}.jar`);
145
+ return jarPath;
146
+ }
147
+ /**
148
+ * 从JAR包中提取所有类文件信息
149
+ */
150
+ async extractClassesFromJar(jarPath) {
151
+ return new Promise((resolve, reject) => {
152
+ const classes = [];
153
+ yauzl.open(jarPath, { lazyEntries: true }, (err, zipfile) => {
154
+ if (err) {
155
+ reject(err);
156
+ return;
157
+ }
158
+ zipfile.readEntry();
159
+ zipfile.on('entry', (entry) => {
160
+ if (entry.fileName.endsWith('.class') && !entry.fileName.includes('$')) {
161
+ const className = entry.fileName
162
+ .replace(/\.class$/, '')
163
+ .replace(/\//g, '.');
164
+ const lastDotIndex = className.lastIndexOf('.');
165
+ const packageName = lastDotIndex > 0 ? className.substring(0, lastDotIndex) : '';
166
+ const simpleName = lastDotIndex > 0 ? className.substring(lastDotIndex + 1) : className;
167
+ classes.push({
168
+ className,
169
+ jarPath,
170
+ packageName,
171
+ simpleName
172
+ });
173
+ }
174
+ zipfile.readEntry();
175
+ });
176
+ zipfile.on('end', () => {
177
+ resolve(classes);
178
+ });
179
+ zipfile.on('error', (err) => {
180
+ reject(err);
181
+ });
182
+ });
183
+ });
184
+ }
185
+ /**
186
+ * 根据类名查找对应的JAR包路径
187
+ */
188
+ async findJarForClass(className, projectPath) {
189
+ const indexPath = path.join(projectPath, '.mcp-class-index.json');
190
+ if (!await fs.pathExists(indexPath)) {
191
+ throw new Error('类索引不存在,请先运行依赖扫描');
192
+ }
193
+ const indexData = await fs.readJson(indexPath);
194
+ const classIndex = indexData.classIndex;
195
+ const entry = classIndex.find(entry => entry.className === className);
196
+ return entry ? entry.jarPath : null;
197
+ }
198
+ /**
199
+ * 获取所有已索引的类名
200
+ */
201
+ async getAllClassNames(projectPath) {
202
+ const indexPath = path.join(projectPath, '.mcp-class-index.json');
203
+ if (!await fs.pathExists(indexPath)) {
204
+ return [];
205
+ }
206
+ const indexData = await fs.readJson(indexPath);
207
+ const classIndex = indexData.classIndex;
208
+ return classIndex.map(entry => entry.className);
209
+ }
210
+ /**
211
+ * 获取Maven命令路径
212
+ */
213
+ getMavenCommand() {
214
+ const mavenHome = process.env.MAVEN_HOME;
215
+ if (mavenHome) {
216
+ const mavenCmd = process.platform === 'win32' ? 'mvn.cmd' : 'mvn';
217
+ return path.join(mavenHome, 'bin', mavenCmd);
218
+ }
219
+ return 'mvn'; // 回退到PATH中的mvn
220
+ }
221
+ /**
222
+ * 获取Maven本地仓库路径
223
+ */
224
+ getMavenRepositoryPath() {
225
+ // 1. 优先使用环境变量 MAVEN_REPO 指定的仓库路径
226
+ const mavenRepo = process.env.MAVEN_REPO;
227
+ if (mavenRepo) {
228
+ return mavenRepo;
229
+ }
230
+ // 2. 使用默认的Maven本地仓库路径
231
+ const homeDir = process.env.HOME || process.env.USERPROFILE;
232
+ return path.join(homeDir, '.m2', 'repository');
233
+ }
234
+ }
235
+ //# sourceMappingURL=DependencyScanner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DependencyScanner.js","sourceRoot":"","sources":["../../src/scanner/DependencyScanner.ts"],"names":[],"mappings":"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"}
Binary file
package/package.json ADDED
@@ -0,0 +1,68 @@
1
+ {
2
+ "name": "java-class-analyzer-mcp-server",
3
+ "version": "1.0.1",
4
+ "description": "MCP server for Java class file analysis and decompilation",
5
+ "main": "dist/index.js",
6
+ "bin": {
7
+ "java-class-analyzer-mcp": "dist/cli.js"
8
+ },
9
+ "type": "module",
10
+ "files": [
11
+ "dist/**/*",
12
+ "lib/**/*",
13
+ "README.md",
14
+ "LICENSE"
15
+ ],
16
+ "scripts": {
17
+ "build": "tsc",
18
+ "start": "node dist/index.js",
19
+ "dev": "tsx src/index.ts",
20
+ "test": "jest",
21
+ "prepublishOnly": "npm run build",
22
+ "prepack": "npm run build",
23
+ "publish:npm": "npm publish",
24
+ "publish:beta": "npm publish --tag beta",
25
+ "version:patch": "npm version patch",
26
+ "version:minor": "npm version minor",
27
+ "version:major": "npm version major"
28
+ },
29
+ "keywords": [
30
+ "mcp",
31
+ "java",
32
+ "decompilation",
33
+ "class-analyzer",
34
+ "model-context-protocol",
35
+ "java-decompiler",
36
+ "maven",
37
+ "dependency-analysis"
38
+ ],
39
+ "author": "handsomestWei",
40
+ "license": "Apache License 2.0",
41
+ "repository": {
42
+ "type": "git",
43
+ "url": "https://github.com/handsomestWei/java-class-analyzer-mcp-server.git"
44
+ },
45
+ "homepage": "https://github.com/handsomestWei/java-class-analyzer-mcp-server#readme",
46
+ "engines": {
47
+ "node": ">=16.0.0"
48
+ },
49
+ "dependencies": {
50
+ "@modelcontextprotocol/sdk": "^0.4.0",
51
+ "commander": "^11.1.0",
52
+ "fs-extra": "^11.2.0",
53
+ "xml2js": "^0.6.2",
54
+ "archiver": "^6.0.1",
55
+ "yauzl": "^3.0.0"
56
+ },
57
+ "devDependencies": {
58
+ "@types/node": "^20.10.0",
59
+ "@types/fs-extra": "^11.0.4",
60
+ "@types/xml2js": "^0.4.14",
61
+ "@types/archiver": "^6.0.2",
62
+ "@types/yauzl": "^2.10.3",
63
+ "typescript": "^5.3.0",
64
+ "tsx": "^4.6.0",
65
+ "jest": "^29.7.0",
66
+ "@types/jest": "^29.5.8"
67
+ }
68
+ }