在个依赖升级的过程中,snyk建议我将guava升级到32.0.0-jre这个版本,最后测试出来这个版本的guava只能部分兼容jdk1.8;
查看guava版本兼容jdk的版本,可以通过以下方式:
1.windows下,按win+r输入cmd进入;
cd C:\path\to\your\jar
将 C:\path\to\your\jar
替换为包含 Guava JAR 文件的实际路径。
3.解压 JAR 文件: 使用 jar
命令(Java SDK 自带)解压 JAR 文件:
jar xf guava-32.0.0-jre.jar
注意:确保你已经安装了 Java JDK,并且 jar
命令可以在命令提示符中使用;
4.在第三步完成之后,需要去检查类文件版本;去验证其中的类文件是否是用 JDK 11 或更高版本编译的;
方法如下:
com/google/common/util/concurrent/SettableFuture.class
2.运行javap命令:使用 javap -verbose
查看该类文件的版本信息。在命令行中执行以下命令:
javap -verbose com/google/common/util/concurrent/SettableFuture.class | findstr "major version"
需要注意的是,路径需要换成你的实际路径;
其中
javap -verbose
:反编译类文件并显示详细信息。findstr "major version"
:过滤输出,只显示类文件的 "major version"3.输出的版本号
ps:这个是我在确认32.0.0-jre时得到的结果,结合我的实际情况表明,
Guava 库中部分类保持了向后兼容:Guava 库可能将一些类(特别是核心工具类或不依赖新特性或模块的类)编译为 JDK 8 兼容的字节码(major version 52),以便与更广泛的 Java 版本兼容。这意味着 Guava 的一部分代码仍然可以在 JDK 8 上运行。
minor version: 0
major version: 52
最后我将guava 32.0.0-jre回退到了guava 30.1.1-jre版本;
@data 2024-11-12
如果是引入guava中的一个依赖项,可以这么做
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>listenablefuture</artifactId>
<version>9999.0-empty-to-avoid-conflict-with-guava</version>
</dependency>
其中,9999.0-empty-to-avoid-conflict-with-guava这个是guava的特殊空版本,只包含 listenablefuture,
这样可以避免引入整个 Guava 库的其他功能,同时保留 listenablefuture
。
还有一个就是引入所需要的guava版本,然后排除不需要的依赖项,这样也是可以的;
ps:自己学习的一些记录,为自己参考;