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

升级Micronaut至3.4.0及更高版本触发java.lang.VerifyError求助

Micronaut升级触发java.lang.VerifyError的排查方案

问题背景

当前技术栈:Micronaut 3.3.3,搭配micronaut-application/library 3.2.1、Micronaut Data Processor 3.2.2,Java 11,多模块Gradle结构。升级Micronaut至3.4.0或最新3.6.1(未同步升级其他依赖)时,触发以下错误:

Caused by: java.lang.VerifyError: Bad type on operand stack
Exception Details:
Location:
insurance/$InsuranceContract$Introspection.dispatch(ILjava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object; @28: invokevirtual
Reason:
Type 'insurance/$InsuranceContract$Introspection' (current frame, stack[1]) is not assignable to 'io/micronaut/context/AbstractExecutableMethodsDefinition'
Current Frame:
bci: @28
flags: { }
locals: { 'insurance/$InsuranceContract$Introspection', integer, 'java/lang/Object', '[Ljava/lang/Object;' }
stack: { 'java/lang/Object', 'insurance/$InsuranceContract$Introspection', integer }
Bytecode:

核心原因与排查方向

  • 依赖版本不兼容:Micronaut 3.4.0及之后版本对内部的Introspection类生成逻辑做了调整,旧版本的micronaut-application/library、Data Processor与新版本核心库不匹配。必须保证所有Micronaut相关依赖(核心、application、data processor等)使用同一主版本,比如升级到3.6.1时,所有依赖都要切换到3.6.x系列,不能混用3.2.x的旧依赖。
  • 编译缓存残留:Gradle的编译缓存可能保留了旧版本注解处理器生成的$InsuranceContract$Introspection这类字节码文件,新版本核心加载时出现类型校验失败。执行清理命令彻底重建:
    ./gradlew clean build --no-build-cache
    
    也可以手动删除各模块的build目录和项目根目录的.gradle缓存文件夹。
  • 多模块依赖冲突:多模块结构中可能存在子模块未同步升级依赖,导致类路径中同时存在新旧版本的Micronaut类。用Gradle命令检查依赖树,定位冲突依赖并强制统一版本:
    ./gradlew dependencies
    
    在根项目的build.gradle中用resolutionStrategy强制所有Micronaut相关依赖的版本:
    allprojects {
        configurations.all {
            resolutionStrategy {
                force 'io.micronaut:micronaut-core:3.6.1'
                force 'io.micronaut:micronaut-application:3.6.1'
                force 'io.micronaut.data:micronaut-data-processor:3.6.1'
                // 其他相关依赖同理
            }
        }
    }
    
  • 编译参数配置问题:确保编译参数符合Micronaut要求,尤其是Java版本和参数传递。在根项目build.gradle中配置:
    plugins {
        id "io.micronaut.application" version "3.6.1" // 插件版本也要同步
    }
    
    tasks.withType(JavaCompile) {
        options.release = 11 // 对应使用的Java版本,Java17则改为17
        options.compilerArgs.add("-parameters") // Micronaut注解处理器需要此参数
    }
    
    注意:升级到Java17时,Gradle版本需至少为7.3,避免兼容问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 19:27:34