新项目搭架子,打开 javalibrary 这类库导航站,一排分类:JSON、日志、HTTP、测试、工具类。点进去每个分类都挂着十几个候选,README 里全写着高性能,反而不知道选哪个。

分类页的价值是让你知道哪些位置需要填人,不是替你做决定。下面按常见分类说清每个位置该看什么。

基础设施这四个位置先定

  • 日志:门面用 SLF4J,实现选 Logback 或 Log4j2,一个项目只留一套
  • JSON:Jackson 是默认答案,Gson 适合轻量场景,Fastjson 历史漏洞多,新项目别碰
  • 连接池:HikariCP,Spring Boot 已经自带,不用再引一次
  • HTTP 客户端:JDK 11 自带的 HttpClient 够用,要拦截器和连接池就看 OkHttp

工具库要看依赖成本

Guava 的不可变集合和本地缓存很好用,代价是带进来一批传递依赖。Commons Lang3 轻,StringUtils 和 Pair 用得最多。Hutool 一个包什么都有,方便是真方便,打出来的 jar 也真大,对体积敏感的客户端项目慎用。三个都引,项目里就会出现三套判空写法。

测试分类别只写 JUnit

JUnit 5 是底座,断言建议换 AssertJ,可读性高一大截。Mockito 用来打桩,mock 静态方法要额外的 inline 依赖。需要真数据库就用 Testcontainers 拉 Docker,比 H2 模拟方言靠谱。分层约束再加 ArchUnit,防止包依赖慢慢乱掉。

选库的四条判断标准

看最近一次发版时间,两年没动的慎用;看 mvn dependency:tree 拉进来多少东西;看许可证,Apache 2.0 和 MIT 最省心,GPL 在商业项目里要谨慎;看 issue 区的响应速度和已知 CVE。四条都过,再看 star 数。

版本别手写,用 spring-boot-dependencies 这类 BOM 统一管,冲突时用 mvn dependency:tree -Dincludes=groupId 定位。分类页是索引,不是答案,选库最终看维护节奏和迁移成本,功能多寡排在后面。