开发工具
English

Jodd:Java 开发者的瑞士军刀,零依赖的微框架集合

评测 Jodd,一个拥有 4000+ stars 的轻量级 Java 工具集和微框架集合,涵盖 HTTP 客户端、JSON 解析、IOC 容器、HTML 解析等模块,零依赖且高度模块化。

javamicro-frameworkutilityhttp-clientjson-parserioc

[广告位: 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 中配置至少一个广告平台

相关文章