You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何验证应用类文件与Jar包为Java 8编译?如何检测Uber Jar内Java版本?

扫描Uber Jar中类文件的Java编译版本方案

一、用JDK自带javap批量扫描

类文件的major version字段对应编译时的Java版本:Java 8对应52.0,Java 11对应55.0。通过以下命令批量检测Uber Jar里的所有类:

# 先把Uber Jar解压到临时目录
unzip your-uber.jar -d temp-classes

# 遍历所有.class文件,提取版本信息并去重统计
find temp-classes -name "*.class" -exec javap -verbose {} \; | grep "major version" | sort | uniq -c

执行后会输出不同版本的出现次数,能快速发现是否存在高于Java 8的类。

二、用jdeps快速检测(JDK 8及以上可用)

jdeps是JDK自带的依赖分析工具,可直接扫描Jar包输出类的版本信息,命令更简洁:

# 直接扫描Jar包,过滤出版本信息
jdeps -verbose:class your-uber.jar | grep "major version"

如果要更清晰的统计结果,结合awk处理:

jdeps -verbose:class your-uber.jar | awk '/major version/ {print $NF, $(NF-2)}' | sort | uniq -c

三、Maven打包前提前拦截

如果用Maven打包Uber Jar(比如使用maven-shade-plugin),可以用maven-enforcer-plugin在打包阶段就检查所有依赖的编译版本,避免事后排查。在pom.xml中添加配置:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-enforcer-plugin</artifactId>
    <version>3.4.1</version>
    <executions>
        <execution>
            <id>check-java-version</id>
            <goals>
                <goal>enforce</goal>
            </goals>
            <configuration>
                <rules>
                    <requireJavaVersion>
                        <!-- 限定依赖编译版本为Java 8 -->
                        <version>[1.8,1.9)</version>
                        <message>依赖编译版本不能超过Java 8!</message>
                    </requireJavaVersion>
                </rules>
            </configuration>
        </execution>
    </executions>
</plugin>

打包时如果有依赖的编译版本高于Java 8,插件会直接报错终止打包。

四、第三方工具ClassVerifier

有专门的轻量工具ClassVerifier,下载后直接运行:

java -jar classverifier.jar your-uber.jar -target 1.8

它会自动列出所有不符合Java 8版本要求的类文件,结果直观清晰。

内容的提问来源于stack exchange,提问作者PatS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 01:50:11