使用 javap 命令查看 class 文件编译时的 jdk 版本
javap 用法如下:
C:\Users\Nihaorz\Desktop>javap --help 用法: javap <options> <classes> 其中, 可能的选项包括: -help --help -? 输出此用法消息 -version 版本信息 -v -verbose 输出附加信息 -l 输出行号和本地变量表 -public 仅显示公共类和成员 -protected 显示受保护的/公共类和成员 -package 显示程序包/受保护的/公共类 和成员 (默认) -p -private 显示所有类和成员 -c 对代码进行反汇编 -s 输出内部类型签名 -sysinfo 显示正在处理的类的 系统信息 (路径, 大小, 日期, MD5 散列) -constants 显示最终常量 -classpath <path> 指定查找用户类文件的位置 -cp <path> 指定查找用户类文件的位置 -bootclasspath <path> 覆盖引导类文件的位置
以 spring-boot-2.7.3.jar 和 spring-boot-3.0.0-M4.jar 分别查看 org.springframework.boot.Banner 接口类为例
spring-boot-2.7.3.jar:
C:\Users\Nihaorz\Desktop>javap -v -cp spring-boot-2.7.3.jar org.springframework.boot.Banner Classfile jar:file:/C:/Users/Nihaorz/Desktop/spring-boot-2.7.3.jar!/org/springframework/boot/Banner.class Last modified 2022-8-18; size 561 bytes MD5 checksum 7751438a4b82f31f42e978bf29df6c68 Compiled from "Banner.java" public interface org.springframework.boot.Banner minor version: 0 major version: 52 flags: ACC_PUBLIC, ACC_INTERFACE, ACC_ABSTRACT Constant pool: #1 = Class #18 // org/springframework/boot/Banner #2 = Class #19 // java/lang/Object #3 = Class #20 // org/springframework/boot/Banner$Mode #4 = Utf8 Mode #5 = Utf8 InnerClasses #6 = Utf8 printBanner #7 = Utf8 (Lorg/springframework/core/env/Environment;Ljava/lang/Class;Ljava/io/PrintStream;)V #8 = Utf8 MethodParameters #9 = Utf8 environment #10 = Utf8 sourceClass #11 = Utf8 out #12 = Utf8 Signature #13 = Utf8 (Lorg/springframework/core/env/Environment;Ljava/lang/Class<*>;Ljava/io/PrintStream;)V #14 = Utf8 SourceFile #15 = Utf8 Banner.java #16 = Utf8 RuntimeVisibleAnnotations #17 = Utf8 Ljava/lang/FunctionalInterface; #18 = Utf8 org/springframework/boot/Banner #19 = Utf8 java/lang/Object #20 = Utf8 org/springframework/boot/Banner$Mode { public abstract void printBanner(org.springframework.core.env.Environment, java.lang.Class<?>, java.io.PrintStream); descriptor: (Lorg/springframework/core/env/Environment;Ljava/lang/Class;Ljava/io/PrintStream;)V flags: ACC_PUBLIC, ACC_ABSTRACT MethodParameters: Name Flags environment sourceClass out Signature: #13 // (Lorg/springframework/core/env/Environment;Ljava/lang/Class<*>;Ljava/io/PrintStream;)V } SourceFile: "Banner.java" RuntimeVisibleAnnotations: 0: #17() InnerClasses: public static final #4= #3 of #1; //Mode=class org/springframework/boot/Banner$Mode of class org/springframework/boot/Banner
其中 major version: 52 表示编译 class 文件使用的是 jdk8
spring-boot-3.0.0-M4.jar:
C:\Users\Nihaorz\Desktop>javap -v -cp spring-boot-3.0.0-M4.jar org.springframework.boot.Banner Classfile jar:file:/C:/Users/Nihaorz/Desktop/spring-boot-3.0.0-M4.jar!/org/springframework/boot/Banner.class Last modified 2022-7-21; size 585 bytes MD5 checksum 15498843d61cd07a5bf5bc601b16ac54 Compiled from "Banner.java" public interface org.springframework.boot.Banner minor version: 0 major version: 61 flags: ACC_PUBLIC, ACC_INTERFACE, ACC_ABSTRACT Constant pool: #1 = Class #2 // org/springframework/boot/Banner #2 = Utf8 org/springframework/boot/Banner #3 = Class #4 // java/lang/Object #4 = Utf8 java/lang/Object #5 = Utf8 printBanner #6 = Utf8 (Lorg/springframework/core/env/Environment;Ljava/lang/Class;Ljava/io/PrintStream;)V #7 = Utf8 MethodParameters #8 = Utf8 environment #9 = Utf8 sourceClass #10 = Utf8 out #11 = Utf8 Signature #12 = Utf8 (Lorg/springframework/core/env/Environment;Ljava/lang/Class<*>;Ljava/io/PrintStream;)V #13 = Utf8 SourceFile #14 = Utf8 Banner.java #15 = Utf8 RuntimeVisibleAnnotations #16 = Utf8 Ljava/lang/FunctionalInterface; #17 = Utf8 NestMembers #18 = Class #19 // org/springframework/boot/Banner$Mode #19 = Utf8 org/springframework/boot/Banner$Mode #20 = Utf8 InnerClasses #21 = Utf8 Mode { public abstract void printBanner(org.springframework.core.env.Environment, java.lang.Class<?>, java.io.PrintStream); descriptor: (Lorg/springframework/core/env/Environment;Ljava/lang/Class;Ljava/io/PrintStream;)V flags: ACC_PUBLIC, ACC_ABSTRACT MethodParameters: Name Flags environment sourceClass out Signature: #12 // (Lorg/springframework/core/env/Environment;Ljava/lang/Class<*>;Ljava/io/PrintStream;)V } SourceFile: "Banner.java" RuntimeVisibleAnnotations: 0: #16() Error: unknown attribute NestMembers: length = 0x4 00 01 00 12 InnerClasses: public static final #21= #18 of #1; //Mode=class org/springframework/boot/Banner$Mode of class org/springframework/boot/Banner
其中 major version: 61 表示编译 class 文件使用的是 jdk17
通过 grep、awk 命令组合得到版本号:
C:\Users\Nihaorz\Desktop>javap -v -cp spring-boot-3.0.0-M4.jar org.springframework.boot.Banner | grep "major version" | awk "{print $3}" 61

浙公网安备 33010602011771号