Java 开发者写 AI Skill 脚本,JBang 是目前最顺手的方案

打开一个 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
2
3
4
5
6
7
8
9
10
11
12
13
14
///usr/bin/env jbang "0""@" ; exit $?
//DEPS com.fasterxml.jackson.core:jackson-databind:2.17.0

import 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);
}
}

运行:

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
2
3
4
.claude/skills/location-info/
├── SKILL.md
└── scripts/
└── ipinfo.java

SKILL.md 告诉 Claude Code 什么时候调用、怎么调用:

1
2
3
4
5
6
7
8
9
10
---
name: location-info
description: 需要根据 IP 地址获取地理位置信息时调用此技能
---

## 查询 IP 地理位置

运行脚本:`jbang ./scripts/ipinfo.java <IP_ADDRESS>`

脚本会返回该 IP 的国家、地区等 JSON 信息,可用于后续分析。

核心脚本 ipinfo.java 用 JDK 17 内置的 HTTP 客户端,不需要任何外部依赖:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
///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 自动下载,不用手动配置。

测试一下:

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
2
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 脚本用同一套机制:

1
2
3
4
5
6
///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 执行。

脚本装成系统命令

1
2
jbang app install ipinfo.java
ipinfo 8.8.8.8

写好的脚本直接装成系统命令,随处可用。JBang 还有 AppStore 机制,可以把脚本发布到 GitHub,让别人一行命令安装你的工具。逻辑有点像 npm 的 npx,但跑的是 Java,依赖从 Maven Central 来。