Jodd:Java 开发者的瑞士军刀,零依赖的微框架集合
评测 Jodd,一个拥有 4000+ stars 的轻量级 Java 工具集和微框架集合,涵盖 HTTP 客户端、JSON 解析、IOC 容器、HTML 解析等模块,零依赖且高度模块化。
广告
说实话,Java 生态里不缺工具库,但像 Jodd 这样能把”轻量”和”全面”结合得这么好的,真不多见。
我第一次注意到它,是因为项目描述里那句”Zero dependencies. Use what you like.”——零依赖,按需取用。在当下这个 Maven 依赖树动辄几十层的时代,这种克制反而成了稀缺品。
这个项目从哪来
Jodd 诞生于 2003 年,作者 Igor Spasic 想给 Java 开发者提供一套”另类但实用”的工具集。20 多年过去,它已经从单一工具库演变成一个包含十几个模块的微框架集合,在 GitHub 上积累了 4000 多 stars。
项目的核心理念很朴素:每个模块都足够小,只解决一个问题,而且彼此之间没有强制依赖。你需要 HTTP 客户端?只引 jodd-http。需要 JSON 解析?只引 jodd-json。不想用 Spring 那种全家桶?没问题。
不过也得提一句,这个项目现在处于转型期。v6 版本开始,各个模块已经被拆分成独立的仓库维护,旧版的 monorepo 主要保留历史版本。核心模块如 HTTP、JSON、Petite 仍在活跃维护,但像 MVC 框架 Madvoc 这类组件基本停留在维护模式。
三个让我印象深刻的模块
1. HTTP 客户端:足够原始,足够好用
Jodd 的 HTTP 模块走的是”小而原始”的路线,底层直接基于 Java Socket,没有引入 Apache HttpClient 或 OkHttp 那种重量级依赖。
// 最简单的 GET 请求
HttpResponse response = HttpRequest
.get("https://api.example.com/users")
.send();
System.out.println(response.bodyText());
// POST 表单
HttpResponse response = HttpRequest
.post("https://api.example.com/login")
.form("username", "admin")
.form("password", "secret")
.send();
// 文件上传
HttpRequest request = HttpRequest
.post("https://api.example.com/upload")
.form("file", new File("report.pdf"))
.form("description", "月度报告");
HttpResponse response = request.send();
API 设计是 fluent 风格,链式调用写起来很顺手。支持 session 保持、自定义 header、文件上传这些常用功能。对于不想引入 OkHttp 或 Apache HttpClient 的项目来说,这是个很干净的选择。
2. JSON 解析器:比 Gson 更轻,比 Jackson 更简单
Jodd JSON 的设计哲学是”够用就好”。它不支持 Jackson 那种复杂的注解体系,但日常序列化反序列化完全没问题。
// 序列化
Book book = new Book();
book.setName("Jodd in Action");
book.setYear(2018);
String json = JsonSerializer.create()
.include("authors")
.serialize(book);
// 反序列化
Book parsed = new JsonParser()
.parse(json, Book.class);
.include() 方法可以精确控制哪些字段参与序列化,.exclude() 则相反。对于简单的 REST API 交互,这个解析器比 Jackson 轻量得多,启动速度也更快。
3. Petite:不用 XML 的 IOC 容器
如果你厌倦了 Spring 的繁琐配置,Petite 可能会让你眼前一亮。它是纯注解驱动的,零 XML。
@PetiteBean
public class UserService {
@PetiteInject
private UserRepository userRepository;
@PetiteInitMethod
public void init() {
// 初始化逻辑
}
}
// 启动容器并扫描类路径
PetiteContainer petite = new PetiteContainer();
new AutomagicPetiteConfigurator(petite).configure();
// 获取 Bean
UserService service = petite.getBean("userService");
构造器注入、字段注入、方法注入都支持,还有 Singleton、Prototype、ThreadLocal 等多种作用域。对于中小型项目,Petite 完全能替代 Spring 的 IOC 部分,而且启动速度快得多。
怎么开始用
Jodd 的模块都发布在 Maven Central,按需引入即可:
<!-- HTTP 客户端 -->
<dependency>
<groupId>org.jodd</groupId>
<artifactId>jodd-http</artifactId>
<version>6.3.0</version>
</dependency>
<!-- JSON 解析 -->
<dependency>
<groupId>org.jodd</groupId>
<artifactId>jodd-json</artifactId>
<version>6.3.0</version>
</dependency>
<!-- IOC 容器 -->
<dependency>
<groupId>org.jodd</groupId>
<artifactId>jodd-petite</artifactId>
<version>6.3.0</version>
</dependency>
JDK 8 及以上都能跑,每个 jar 包也就几十到一百多 KB,对包体积敏感的项目很友好。
优点和缺点
优点:
- 零依赖,每个模块独立可用,不会拖垮你的依赖树
- 包体积极小,适合对体积敏感的场景(比如 Android 或嵌入式)
- API 设计简洁直观,学习成本低
- BSD 许可证,商用完全没限制
缺点:
- 社区活跃度一般,GitHub issues 只有 2 个,PR 为 0,说明用的人不少但参与贡献的不多
- 文档分散在各个子站点,没有统一的入口,查找起来有点麻烦
- 部分模块如 MVC 框架 Madvoc 已经停止新功能开发,处于维护模式
- 和 Spring 生态的集成度几乎为零,如果你已经在用 Spring,切过来的成本不低
适合谁用
我觉得 Jodd 最适合这几类人:
- 做小型工具或脚本,不想引入 Spring Boot 那种重型框架
- 对依赖树体积敏感,比如 Android 开发或云函数场景
- 想找一个比 Gson/FastJSON 更轻、比 Jackson 更简单的 JSON 库
- 学习 IOC/DI 原理,Petite 的源码比 Spring 容易读得多
总结
Jodd 不是那种会让你”哇”一声的网红项目,但它像一把瑞士军刀——平时放在包里不占地方,关键时刻掏出来就能解决问题。4000 多 stars 背后,是 20 多年在 Java 生态里的默默耕耘。
如果你正在找一个轻量、零依赖、按需取用的 Java 工具集,Jodd 值得你花半小时了解一下。
推荐指数:⭐⭐⭐⭐(扣一星给分散的文档和社区活跃度)
关于作者
柳钉鱼,全栈开发者,GitHub 重度用户。过去 3 年 Star 了 900+ 仓库,这里只写我真正用过或深度调研过的工具。
📧 发现好工具想推荐?发邮件到 [email protected]
广告