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

使用ASM 6.1动态生成Class文件,打包Fat Jar时Maven Shade插件报错求助

解决ASM动态生成Class配合Maven Shade打包的IllegalArgumentException问题

我之前也踩过ASM动态生成类配合maven-shade-plugin打包的坑,给你几个实用的排查和解决方向:

1. 升级Maven Shade插件版本

你当前使用的maven-shade-plugin:2.4.3版本比较老旧,对ASM 6.1生成的字节码可能存在兼容性问题。建议升级到较新的稳定版本(比如3.4.1),修改你的pom.xml插件配置:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>3.4.1</version>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>shade</goal>
            </goals>
        </execution>
    </executions>
</plugin>

2. 重命名ASM依赖包避免冲突

动态生成的类可能和项目依赖中的ASM类产生命名或字节码结构冲突,通过relocate配置重命名ASM的包路径,能有效避免这类问题:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>3.4.1</version>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>shade</goal>
            </goals>
            <configuration>
                <relocations>
                    <relocation>
                        <pattern>org.objectweb.asm</pattern>
                        <shadedPattern>your.project.shaded.asm</shadedPattern>
                    </relocation>
                </relocations>
            </configuration>
        </execution>
    </executions>
</plugin>

记得把your.project.shaded.asm替换成你项目的实际包路径。

3. 验证ASM生成的字节码合法性

如果ASM生成的字节码不符合JVM规范,Shade插件在处理时会抛出IllegalArgumentException。你可以用ASM自带的CheckClassAdapter来验证生成的类:

// 在你的类生成逻辑中添加验证步骤
ClassWriter classWriter = new ClassWriter(ClassWriter.COMPUTE_FRAMES);
// 这里是你的ASM生成代码(比如访问类、方法、字段等)
// ...

// 验证字节码是否合法
CheckClassAdapter.verify(classWriter, false, new PrintWriter(System.out));

运行这段代码后,控制台会输出字节码的错误信息,修复这些问题后再尝试打包。

4. 获取详细错误日志定位问题

默认的Maven日志信息不够详细,你可以添加-X参数运行打包命令,获取完整的堆栈跟踪:

mvn shade:shade -X

从详细日志里找到IllegalArgumentException的具体触发位置(比如涉及哪个类、哪个方法),能帮你更精准地定位问题根源。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:28:21