Spring Boot项目Proguard混淆打包报错:不支持Java版本53.0
首先咱们明确问题根源:你使用的Proguard 5.3.3最高仅支持Java 8的类版本(对应版本号52.0),但项目依赖的log4j包中包含了针对Java 9编译的类文件(版本号53.0,路径为META-INF/versions/9/org/apache/logging/log4j/util/ProcessIdUtil.class),导致Proguard在打包时无法处理这些类,进而触发报错。
下面给你两个最优解决方案,按优先级排序:
方案一:升级Proguard及Maven插件(长期最优解)
Proguard从6.0版本开始正式支持Java 9及以上版本,同时你需要把对应的Maven插件升级到兼容版本(比如proguard-maven-plugin 2.1.0及以上)。
修改你的Maven插件配置如下:
<plugin> <groupId>com.github.wvengen</groupId> <artifactId>proguard-maven-plugin</artifactId> <!-- 升级到支持Proguard 6+的插件版本 --> <version>2.1.1</version> <executions> <execution> <phase>package</phase> <goals> <goal>proguard</goal> </goals> </execution> </executions> <configuration> <!-- 指定使用Proguard 6.2.2版本(可根据需求调整为更高兼容版本) --> <proguardVersion>6.2.2</proguardVersion> <!-- 你的其他Proguard配置 --> <options> <option>-keep public class com.yourpackage.MainClass { public static void main(java.lang.String[]); }</option> <!-- 其他规则 --> </options> </configuration> <dependencies> <dependency> <groupId>net.sf.proguard</groupId> <artifactId>proguard-base</artifactId> <version>6.2.2</version> <scope>runtime</scope> </dependency> </dependencies> </plugin>
升级后,Proguard不仅能正确处理Java 9的类文件,还能兼容后续更高版本的Java,是最彻底的解决方式。
方案二:配置Proguard忽略Java 9专属类文件(临时快速解决)
如果暂时不想升级Proguard,也可以通过配置让它跳过META-INF/versions/9/路径下的所有类——这些是log4j为Java 9及以上版本提供的兼容类,在Java 8环境下根本不会被加载,所以忽略它们不会影响项目运行。
修改Maven插件配置,添加过滤规则:
<plugin> <groupId>com.github.wvengen</groupId> <artifactId>proguard-maven-plugin</artifactId> <version>2.0.14</version> <executions> <execution> <phase>package</phase> <goals> <goal>proguard</goal> </goals> </execution> </executions> <configuration> <!-- 添加过滤规则,排除META-INF/versions/9下的所有类 --> <injarFilter>!META-INF/versions/9/**</injarFilter> <!-- 你的其他Proguard配置 --> </configuration> </plugin>
或者直接在Proguard的options里添加排除规则:
<options> <option>-injars ${project.build.finalName}.jar(!META-INF/versions/9/**)</option> <!-- 其他规则 --> </options>
这样Proguard就会跳过那些不支持的类文件,顺利完成打包。
额外说明
你之前尝试升级到Java 9但失败,是因为Proguard 5.x系列确实不支持Java 9,所以升级Proguard版本才是解决Java版本兼容问题的根本。
内容的提问来源于stack exchange,提问作者Ndzembomenyi Aruna




