打开一个 Claude Code 的 Skills 目录,仔细看了看结构。

一个 AI Skill 通常由两部分组成:SKILL.md 描述技能的用途和调用逻辑,里面会告诉 Agent 遇到什么情况时、去执行哪个脚本、传什么参数。这些被调用的脚本,才是真正干活的部分。
轻量的业务逻辑用 Python 或 Shell 脚本实现没什么问题,但团队里大部分人是 Java 背景,让他们临时去学 Python 只是为了写个 Skill 脚本,代价有点高。我一直在找一个方案,能让 Java 开发者不换语言就直接上手。
找到了。叫 JBang。
JBang:一个文件,直接运行
JBang 在 Java 社区默默存在了好几年,大多数时候被当成”挺有用但我暂时用不到”的工具。然后 AI Agent 来了。
它做的事说起来很简单:让 .java 文件直接当脚本运行,依赖声明写在注释里,不需要任何项目结构。
同样是用 Jackson 解析 JSON,JBang 版本长这样:
1 | ///usr/bin/env jbang "0""@" ; exit $? |
运行:
1 | jbang JsonReader.java |
一个文件。没有 pom.xml,没有 src/main/java,没有 Maven 各种默认行为目录。
//DEPS 那行是核心。JBang 读到这行,自动从 Maven Central 拉依赖,缓存到本地,加进 classpath,然后运行你的 main

装好 JBang,只要一行命令
Linux 和 macOS:
1 | curl -Ls https://sh.jbang.dev | bash -s - app setup |
这行命令会下载 JBang,配置 PATH,顺带给你装一个 j! 的 alias——是的,感叹号——这是 jbang 的快捷方式。j! version 确认一下安装成功。
macOS 也可以用 Homebrew:
1 | brew install jbangdev/tap/jbang |
有 SDKMAN 的直接 sdk install jbang。Windows 用 Scoop 或 Chocolatey 都支持。
装好之后,直接上手做一个真实的 AI Skill。
实战:给 Claude Code 写一个 Java Skill 脚本
Claude Code 的 Skill 机制里,.claude/skills/ 目录下放着技能定义。每个 Skill 包含一个 SKILL.md——告诉 AI 这个技能是干什么的、怎么调用——以及一些可执行脚本,AI 在需要时调用它们。
以前这些脚本只能是 Python 或 Shell。现在可以是 JBang 脚本。
示例:IP 地理信息查询 Skill
目录结构如下:
1 | .claude/skills/location-info/ |
SKILL.md 告诉 Claude Code 什么时候调用、怎么调用:
1 | --- |
核心脚本 ipinfo.java 用 JDK 17 内置的 HTTP 客户端,不需要任何外部依赖:
1 | ///usr/bin/env jbang "0""@" ; exit $? |
//JAVA 17+ 这行保证脚本用 Java 17 或更高版本运行。本机没有合适版本,JBang 自动下载,不用手动配置。
测试一下:
1 | jbang .claude/skills/location-info/scripts/ipinfo.java 8.8.8.8 |
终端里会出现 Google DNS 服务器的地理信息 JSON。Claude Code 拿到这个 JSON,解析出国家代码,可以继续调用其他 Skill 做更多事情。整个流程纯 Java,没有 Python,没有 Shell。
还有更快的写法
JBang 最近的版本加入了 AI 辅助生成功能:

这行命令调用 AI,直接生成一个符合 JBang 格式的 .java 脚本文件。生成完直接跑,不用自己拼 HTTP 请求。
2026 年的 JBang,连脚本本身都可以让 AI 帮你写。
几个值得知道的细节
直接执行,不加前缀
脚本开头那行 ///usr/bin/env jbang "$0" "$@" ; exit $? 不是装饰。加上它,配合 chmod +x,你的 .java 文件可以像 Shell 脚本一样直接运行:
1 | chmod +x ipinfo.java |
对 AI Agent 调用来说很友好。Agent 不需要知道这是 Java,给参数,读标准输出,完事。
固定 Java 版本
在脚本里加一行 //JAVA 21+,JBang 就会保证用 Java 21 或以上版本运行,低版本自动升级。特别适合团队共享脚本——不用在 README 里反复提醒”记得装对 Java 版本”。
支持 Kotlin
JBang 不只支持 Java。Kotlin 脚本用同一套机制:
1 | ///usr/bin/env jbang "$0" "$@" ; exit $? |
同一套 //DEPS 声明依赖,同一套 jbang xxx.kt 执行。
脚本装成系统命令
1 | jbang app install ipinfo.java |
写好的脚本直接装成系统命令,随处可用。JBang 还有 AppStore 机制,可以把脚本发布到 GitHub,让别人一行命令安装你的工具。逻辑有点像 npm 的 npx,但跑的是 Java,依赖从 Maven Central 来。