Compose Multiplatform Web编译报错:java.lang.AssertionError: Assertion failed
Compose Multiplatform Web编译断言失败问题排查方案
开发Compose Multiplatform项目时,Android、iOS和桌面端运行完全正常,但编译Web平台时抛出java.lang.AssertionError,堆栈跟踪信息如下:
java.lang.AssertionError: Assertion failed at org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.JsAstUtilsKt.checkOnNullability(jsAstUtils.kt:430) at org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.JsAstUtilsKt.translateCallArguments(jsAstUtils.kt:401) at org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.JsAstUtilsKt.translateCallArguments$default(jsAstUtils.kt:385) at org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.JsAstUtilsKt.translateCall(jsAstUtils.kt:163) at org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.IrElementToJsExpressionTransformer.visitCall(IrElementToJsExpressionTransformer.kt:235) at org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.IrElementToJsExpressionTransformer.visitCall(IrElementToJsExpressionTransformer.kt:25) at org.jetbrains.kotlin.ir.expressions.IrCall.accept(IrCall.kt:26) at org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.IrElementToJsStatementTransformer$maybeOptimizeIntoSwitch$2.invoke(IrElementToJsStatementTransformer.kt:114) at org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.IrElementToJsStatementTransformer$maybeOptimizeIntoSwitch$2.invoke(IrElementToJsStatementTransformer.kt:114) at org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.IrElementToJsStatementTransformer$visitReturn$lastStatementTransformer$2.invoke(IrElementToJsStatementTransformer.kt:142) at org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.IrElementToJsStatementTransformer$visitReturn$lastStatementTransformer$2.invoke(IrElementToJsStatementTransformer.kt:131) at org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.IrElementToJsStatementTransformer.maybeOptimizeIntoSwitch(IrElementToJsStatementTransformer.kt:114) at org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.IrElementToJsStatementTransformer.visitReturn(IrElementToJsStatementTransformer.kt:146) at org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.IrElementToJsStatementTransformer.visitReturn(IrElementToJsStatementTransformer.kt:32) at org.jetbrains.kotlin.ir.expressions.IrReturn.accept(IrReturn.kt:26) at org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.IrElementToJsStatementTransformer.visitBlockBody(IrElementToJsStatementTransformer.kt:40) at org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.IrElementToJsStatementTransformer.visitBlockBody(IrElementToJsStatementTransformer.kt:32) at org.jetbrains.kotlin.ir.expressions.IrBlockBody.accept(IrBlockBody.kt:25) at org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.JsAstUtilsKt.translateFunction(jsAstUtils.kt:118) at org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.IrFunctionToJsTransformer.visitSimpleFunction(IrFunctionToJsTransformer.kt:30) at org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.IrFunctionToJsTransformer.visitSimpleFunction(IrFunctionToJsTransformer.kt:16) at org.jetbrains.kotlin.ir.declarations.IrSimpleFunction.accept(IrSimpleFunction.kt:37) at org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.JsClassGenerator.generateMemberFunction(JsClassGenerator.kt:318) at org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.JsClassGenerator.generateClassBlock(JsClassGenerator.kt:129) at org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.JsClassGenerator.generate(JsClassGenerator.kt:64) at org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.IrDeclarationToJsTransformer.visitClass(IrDeclarationToJsTransformer.kt:30) at org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.IrDeclarationToJsTransformer.visitClass(IrDeclarationToJsTransformer.kt:13) at org.jetbrains.kotlin.ir.declarations.IrClass.accept(IrClass.kt:73) at org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.IrFileToJsTransformer.visitFile(IrFileToJsTransformer.kt:25) at org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.IrFileToJsTransformer.visitFile(IrFileToJsTransformer.kt:14) at org.jetbrains.kotlin.ir.declarations.IrFile.accept(IrFile.kt:31) at org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.IrModuleToJsTransformer.generateProgramFragment(IrModuleToJsTransformer.kt:355) at org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.IrModuleToJsTransformer.access$generateProgramFragment(IrModuleToJsTransformer.kt:126) at org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.IrModuleToJsTransformer$makeIrFragmentsGenerators$2$1.invoke(IrModuleToJsTransformer.kt:221) at org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.IrModuleToJsTransformer$makeIrFragmentsGenerators$2$1.invoke(IrModuleToJsTransformer.kt:221) at org.jetbrains.kotlin.ir.backend.js.ic.CacheUpdater.generateIrFragments(CacheUpdater.kt:759) at org.jetbrains.kotlin.ir.backend.js.ic.CacheUpdater.actualizeCaches(CacheUpdater.kt:770) at org.jetbrains.kotlin.cli.js.K2JsIrCompiler.prepareIcCaches(K2JsIrCompiler.kt:615) at org.jetbrains.kotlin.cli.js.K2JsIrCompiler.doExecute(K2JsIrCompiler.kt:253) at org.jetbrains.kotlin.cli.js.K2JSCompiler.doExecute(K2JSCompiler.java:181) at org.jetbrains.kotlin.cli.js.K2JSCompiler.doExecute(K2JSCompiler.java:72) at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.kt:104) at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.kt:48) at org.jetbrains.kotlin.cli.common.CLITool.exec(CLITool.kt:101)
以下是可行的排查和解决步骤:
清理缓存并重新编译
执行命令:./gradlew clean :web:compileDevelopmentExecutableKotlinJs或在IDE中执行"Clean Project"后重新构建Web目标。
检查版本兼容性
确认项目中Kotlin版本与Compose Multiplatform版本完全匹配,版本不兼容常导致JS后端IR转换异常。定位问题代码
堆栈指向JS后端转换函数调用时的空断言失败,需排查:- 最近新增的跨平台共享代码中涉及空安全的逻辑
- 平台特定API调用时的空值处理差异
- 尝试注释可疑代码段,逐步缩小范围找到触发断言的位置
- 对可能为null的变量显式添加空判断,避免类型不匹配
禁用增量编译(临时方案)
在项目根目录gradle.properties中添加:kotlin.js.incremental=false增量编译缓存可能引发异常,禁用后重新编译验证。
升级依赖版本
尝试将Kotlin、Compose Multiplatform升级到最新稳定版,这类断言失败多为编译器后端已知bug,新版本通常已修复。
内容的提问来源于stack exchange,提问作者Siddharth Shakya
相关产品推荐
相关产品推荐

