
Guava 不需要“配置环境”,它就是一个普通 JAR 包,直接加进 classpath 就能用;所谓“指南”里最常踩的坑,是误以为它要像 Spring 那样启动或扫描。
怎么把 Guava 加进 Maven 项目
Maven 是当前最主流的引入方式,关键是选对坐标和作用域。Guava 没有运行时依赖,compile 范围足够,不用 runtime 或 provided。
- 去 Maven Central 查最新稳定版,比如
33.2.1-jre(注意后缀-jre表示 JDK 8+ 兼容版) - 别用
-android版本,除非你真在写 Android 应用——它删了java.time相关类,JDK 环境下会报NoClassDefFoundError - 如果项目已用 JDK 17+,确认没混用老版本(如
29.0-jre),某些泛型推导在新编译器下会失败
<dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>33.2.1-jre</version> </dependency>
手动引入 JAR 包时为什么 ImmutableList.of() 找不到
不是代码写错,而是 JAR 没进 classpath,或者 IDE 没刷新依赖。Guava 的核心类都在 com.google.common.* 下,没有额外初始化逻辑。
- 检查
lib/目录下 JAR 名是否含guava-前缀,且不是guava-testlib(那是测试工具包,不含ImmutableList) - IDEA 中右键项目 →
Reload project,Eclipse 要点Project → Refresh,否则即使放对位置也识别不了 - 运行时抛
NoClassDefFoundError: com/google/common/collect/ImmutableList,90% 是因为打包时漏了 Guava JAR(比如用java -cp启动却没把 guava.jar 列进去)
为什么用了 Splitter 却报 java.lang.NoClassDefFoundError: com/google/common/base/CharMatcher
这是典型的“部分类加载成功、部分缺失”现象,说明 Guava JAR 文件损坏,或被其他同名但内容不全的包覆盖了。
立即学习“Java免费学习笔记(深入)”;
- 用
jar -tf guava-33.2.1-jre.jar | grep CharMatcher确认该类是否存在;若无输出,说明下载不完整 - 检查是否有多个 Guava 版本冲突:比如
guava-27.0-jre.jar和guava-33.2.1-jre.jar同时在 classpath,JVM 可能加载了旧版(它不含新版的CharMatcher实现) - 某些构建脚本(如 Ant)会用
<fileset></fileset>匹配guava*.jar,结果把guava-testlib或guava-beta-checker也塞进去了——它们不含运行时类
真正麻烦的从来不是“怎么加”,而是加完之后发现某个方法死活调不通,然后花半小时查是不是版本不对、路径不对、IDE 缓存没清——Guava 本身没魔法,但它的轻量反而让人容易忽略 classpath 这种底层事实。










