本章做最后的落地工作,用户通过openclaw给出命令直接执行任务,下一章给出测试效果
1.打包Java代码
为什么 Jar 有两个,6.7MB 和 23KB
| 文件 | 大小 | 里面有什么 |
|---|---|---|
original-recharge-risk-demo-1.0.0.jar |
23KB | 只有你自己写的 12 个类(model/dao/service/mcp),没有第三方库 |
recharge-risk-demo-1.0.0.jar |
6.7MB | 你的 12 个类 + MySQL 驱动 + Jackson + SnakeYAML 全塞进去 |
23KB 的叫瘦包,maven-jar-plugin 打的,java -jar 跑它必报 No suitable driver found for jdbc:mysql,因为里面没有 MySQL 驱动,连库时 DriverManager 找不到实现类。
6.7MB 的叫 fat-jar(uber-jar),是 maven-shade-plugin 打的。它做的是解压所有依赖 Jar 再重新压成一个,日志里 Including mysql-connector-j ... Including jackson-databind ... 就是证据。所以 OpenClaw 配的必须是这个 6.7MB 的。
shade把主类定义成RechargeMcpServer什么意思
shade = maven-shade-plugin,是 Maven 的打包插件
Jar 里 META-INF/MANIFEST.MF 有一行 Main-Class: xxx,决定 java -jar 双击运行进哪个 main()。
- 改之前是
com.demo.risk.Main:进去就跑批,打印=== 恶意充值检测 Demo ===,不读 stdin,你喂tools/list它也听不懂。 - 改之后是
com.demo.risk.mcp.RechargeMcpServer:进去就进入 STDIO 循环,从 stdin 一行行读 JSON-RPC,这才是 MCP Server 的工作模式。
所以 pom.xml 里那段 <mainClass>com.demo.risk.mcp.RechargeMcpServer</mainClass> 就是在改这个入口。Main 跑批功能还在,只是换种方式调用:mvn exec:java -Dexec.mainClass=com.demo.risk.Main。
2.验证
验证 tools/list
假装自己是 OpenClaw,问你的 Java "你都会啥"
验证 tools/call detectRisk
假装自己是 OpenClaw,让你的 Java 真跑一次检测


3.配置openclaw:
在你本地openclaw文件夹中的openclaw.json文件直接配置即可(直接在根节点新增 mcp 这个顶层 key)
"recharge-risk": {"type":"stdio","command":"java","args":["-jar","D:/code/SkillorMcp_in_OpenClaw/java/target/recharge-risk-demo-1.0.0.jar"]}


配置完成后重启gateway或者直接重启openclaw