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

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

02装好 JBang,只要一行命令
Linux 和 macOS:
curl -Ls https://sh.jbang.dev | bash -s - app setup
这行命令会下载 JBang,配置 PATH,顺带给你装一个 j! 的 alias——是的,感叹号——这是 jbang 的快捷方式。j! version 确认一下安装成功。
macOS 也可以用 Homebrew:
brew install jbangdev/tap/jbang
有 SDKMAN 的直接 sdk install jbang。Windows 用 Scoop 或 Chocolatey 都支持。
装好之后,直接上手做一个真实的 AI Skill。
03实战:给 Claude Code 写一个 Java Skill 脚本
Claude Code 的 Skill 机制里,.claude/skills/ 目录下放着技能定义。每个 Skill 包含一个 SKILL.md——告诉 AI 这个技能是干什么的、怎么调用——以及一些可执行脚本,AI 在需要时调用它们。
以前这些脚本只能是 Python 或 Shell。现在可以是 JBang 脚本。
示例:IP 地理信息查询 Skill
目录结构如下:
.claude/skills/location-info/├── SKILL.md└── scripts/ └── ipinfo.java
SKILL.md 告诉 Claude Code 什么时候调用、怎么调用:
---name: location-infodescription: 需要根据 IP 地址获取地理位置信息时调用此技能---## 查询 IP 地理位置运行脚本:`jbang ./scripts/ipinfo.java <IP_ADDRESS>`脚本会返回该 IP 的国家、地区等 JSON 信息,可用于后续分析。
核心脚本 ipinfo.java 用 JDK 17 内置的 HTTP 客户端,不需要任何外部依赖:
▸Spring Boot 4 + AI 全面升级 + ToB 移动端:PIG AI 新版来了///usr/bin/env jbang "$0" "$@" ; exit $?//JAVA 17+import java.net.URI;import java.net.http.HttpClient;import java.net.http.HttpRequest;import java.net.http.HttpResponse;import java.time.Duration;public class ipinfo {public static void main(String[] args) throws Exception {if (args.length == 0) { System.err.println("Usage: jbang ipinfo.java <IP_ADDRESS>"); System.exit(1); }String ip = args[0];String url = "https://ipapi.co/" + ip + "/json/";HttpClient client = HttpClient.newBuilder() .connectTimeout(Duration.ofSeconds(10)) .build();HttpRequest request = HttpRequest.newBuilder() .uri(URI.create(url)) .timeout(Duration.ofSeconds(10)) .GET() .build(); HttpResponse<String> response = client.send( request, HttpResponse.BodyHandlers.ofString() );if (response.statusCode() == 200) { System.out.println(response.body()); } else { System.err.println("Error: " + response.statusCode()); System.exit(1); } }}
//JAVA 17+ 这行保证脚本用 Java 17 或更高版本运行。本机没有合适版本,JBang 自动下载,不用手动配置。
测试一下:
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 帮你写。
▸PIG AI 更新:Skills 再升级,企业 API 秒变 Agent04几个值得知道的细节
直接执行,不加前缀
脚本开头那行 ///usr/bin/env jbang "$0" "$@" ; exit $? 不是装饰。加上它,配合 chmod +x,你的 .java 文件可以像 Shell 脚本一样直接运行:
chmod +x ipinfo.java./ipinfo.java 1.1.1.1
对 AI Agent 调用来说很友好。Agent 不需要知道这是 Java,给参数,读标准输出,完事。
固定 Java 版本
在脚本里加一行 //JAVA 21+,JBang 就会保证用 Java 21 或以上版本运行,低版本自动升级。特别适合团队共享脚本——不用在 README 里反复提醒"记得装对 Java 版本"。
支持 Kotlin
JBang 不只支持 Java。Kotlin 脚本用同一套机制:
///usr/bin/env jbang "$0" "$@" ; exit $?//KOTLIN 1.9+fun main(args: Array<String>) { println("Hello from Kotlin ${args.firstOrNull() ?: "World"}")}
同一套 //DEPS 声明依赖,同一套 jbang xxx.kt 执行。
脚本装成系统命令
jbang app install ipinfo.javaipinfo 8.8.8.8
写好的脚本直接装成系统命令,随处可用。JBang 还有 AppStore 机制,可以把脚本发布到 GitHub,让别人一行命令安装你的工具。逻辑有点像 npm 的 npx,但跑的是 Java,依赖从 Maven Central 来。
夜雨聆风









