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

ProGuard混淆Maven项目遇module-info.class处理失败问题求助

解决ProGuard与JDK23兼容及module-info.class排除问题

问题根源

你的错误是因为ProGuard 7.4.1不支持JDK23生成的class文件版本(67.0),该版本最高仅支持到Java 21(class版本65)。同时你用的inLibFilter只针对依赖库,无法排除输入jar中的module-info.class。

具体解决方案

1. 升级ProGuard版本到支持JDK23的版本

修改proguard-maven-plugin的配置,确保使用的ProGuard核心版本支持JDK23。目前ProGuard 7.5.0及以上版本已支持Java 23,你需要在插件的依赖中指定该版本:

<plugin>
    <groupId>com.github.wvengen</groupId>
    <artifactId>proguard-maven-plugin</artifactId>
    <version>2.6.1</version>
    <executions>
        <!-- 保留你的执行配置 -->
    </executions>
    <configuration>
        <!-- 保留你的现有配置 -->
    </configuration>
    <dependencies>
        <dependency>
            <groupId>com.guardsquare</groupId>
            <artifactId>proguard-base</artifactId>
            <version>7.5.0</version>
        </dependency>
    </dependencies>
</plugin>

2. 正确排除输入jar中的module-info.class

inLibFilter仅作用于依赖库,要排除输入jar中的module-info.class,需要添加<injarFilter>配置:

<configuration>
    <!-- 保留你的现有配置 -->
    <injarFilter>!module-info.class</injarFilter> <!-- 新增此配置 -->
</configuration>

3. 调整JMod依赖的过滤(可选)

如果依赖的JMod中仍存在版本兼容问题,可以在<lib>配置中直接排除module-info.class:

<libs>
    <lib>${java.home}/jmods/java.base.jmod(!module-info.class)</lib>
    <lib>${java.home}/jmods/java.logging.jmod(!module-info.class)</lib>
    <lib>${java.home}/jmods/java.sql.jmod(!module-info.class)</lib>
</libs>

验证

完成上述修改后,重新执行mvn package,ProGuard应该能正常处理JDK23编译的class文件,同时跳过module-info.class的处理。

内容的提问来源于stack exchange,提问作者Hikmet Emre Kaya

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 16:48:16