Jodd:Java 开发者的瑞士军刀,零依赖的微框架集合
评测 Jodd,一个拥有 4000+ stars 的轻量级 Java 工具集和微框架集合,涵盖 HTTP 客户端、JSON 解析、IOC 容器、HTML 解析等模块,零依赖且高度模块化。
[广告位: article-top] 请在 .env 中配置至少一个广告平台
说实话,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 值得你花半小时了解一下。
推荐指数:⭐⭐⭐⭐(扣一星给分散的文档和社区活跃度)
[广告位: article-bottom] 请在 .env 中配置至少一个广告平台