Idea打包时指定JDK的版本以及多模块项目指定单个模块的JDK版本

发布时间 2023-11-01 15:23:27作者: 浪迹天涯的派大星

有时候项目中需要对模块指定JDK打包,下面会介绍如何利用Idea指定打包的JDK版本,以及如何判断Jar的jdk版本

1、Idea打包时指定JDK的版本

如果需要修改整个项目的JDK版本进行打包,如下图,选择对应的JDK版本

2、打包多模块项目指定单个模块的JDK版本

多模块的项目中,如果需要修改某一个模块的JDK版本,可以在模块的pom文件中,增加如下配置,然后进行打包即可,例如整体项目的JDK是11,但是想修改其中某一个模块为JDK8

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.1</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>
    </plugins>
</build>

注意:只修改pom文件,打出的Jar包中的MANIFEST.MF文件中的Build-Jdk字段的显示可能不准,就是可能显示的第1节中的Idea中设置的版本,但是jar实际的字节码版本是对的。

可以既修改pom文件又修改项目的打包JDK版本,使两者保持一致

3、判断jar的版本

有以下4种方式来判断Jar的JDK版本

方式一:解压Jar包,查看/META-INF/MANIFEST.MF文件中的Build-Jdk字段,如下图,优点是可以很快的确认Jar的版本,缺点是不准确,但是大部分情况下是准确的,和制作者的打包方式有关。

Build-Jdk表示的不是编译的JDK版本,例如用Idea打包时,就是项目的JDK版本,如目录一中的图所示。

方式二:将Jar包用Idea工具打开,查看其class文件,Idea会提示当前class文件编译的JDK版本。

具体方式是,将要查看的Jar,放入一个文件夹内,使用Idea打开这个文件夹,选择文件夹内的Jar,右键选择Add as Library,如下图

然后打开Jar包内,任意一个class文件,会显示当前Jar的字节码版本以及对应的编译的JDK版本,如下图

方式三:可以使用本地JDK自带的工具javap,解压Jar包后,查看其中某一个class的版本,在cmd命令窗口,敲如下指令

javap -v E:\project\test.class

执行结果开头,可以看到如下图,major version即为字节码的版本

Majar Version与Jdk版本对应关系,JDK1对应45,JDK2对应46,两者依次加一,以此类推:JDK8对应52,JDK17对应61

方式四:将Jar包解压后,拿到其中任意一个class文件,浏览器搜索 在线二进制文件16进制查看,选择任意一个进入 (在线二进制文件查看器 (markbuild.com)),上传文件可以看到如下:

如上图所示,37的16进制,转换成十进制,就是3×16+7 = 55,按照上面的Majar Version与Jdk版本对应关系,55-44 = 11,则是JDK11