
本文详解如何通过配置 kotlin-maven-plugin 启用 Kotlin/JS 的 IR 编译器后端,解决因旧版后端弃用导致的构建失败问题,并提供可直接复用的 pom.xml 配置方案。
本文详解如何通过配置 `kotlin-maven-plugin` 启用 kotlin/js 的 ir 编译器后端,解决因旧版后端弃用导致的构建失败问题,并提供可直接复用的 `pom.xml` 配置方案。
自 Kotlin 1.9.0 起,Kotlin/JS 的 Legacy(基于 Kotlin/JS 插件旧版字节码生成器)编译器已正式弃用;从 1.9.10 开始,Legacy 后端被完全移除,所有 Kotlin/JS 构建必须使用 IR(Intermediate Representation)后端。若你仍在使用默认配置的 kotlin-maven-plugin 执行 mvn compile,将收到明确错误:
[ERROR] Old Kotlin/JS compiler is no longer supported. Please migrate to the new JS IR backend
该错误并非因插件版本过低,而是因为 IR 后端默认处于显式关闭状态——即使你已升级到 Kotlin 1.9.10+,若未主动启用 useIrBackend,插件仍尝试调用已被移除的 Legacy 流程。
DMap GL地图JSAPI(dmapgl)开发指南。用于编写、审查、调试 DMap 地图 API 代码,涵盖地图初始化、覆盖物渲染、图层管理、事件处理、控件交互等任务。当用户提及 dmap、dmapgl、jsapi‑gl 或相关地图开发需求时自动触发。
✅ 正确启用 IR 后端:关键配置
只需在 kotlin-maven-plugin 的
<plugin><groupid>org.jetbrains.kotlin</groupid><artifactid>kotlin-maven-plugin</artifactid><version>${kotlin.version}</version><configuration><useirbackend>true</useirbackend><!-- 必须显式设为 true --><!-- 可选:指定输出目标(默认为 browser,也可设为 nodejs) --><!-- <target>browser</target> --></configuration><executions><execution><id>compile</id><goals><goal>compile</goal><goal>js</goal><!-- 注意:此 goal 已自动绑定至 IR 流程 --></goals></execution><execution><id>test-compile</id><goals><goal>test-compile</goal></goals></execution></executions></plugin>
? 验证配置是否生效?
运行 mvn help:describe -DgroupId=org.jetbrains.kotlin -DartifactId=kotlin-maven-plugin -Ddetail=true 可查看插件所有支持参数。在输出中搜索 useIrBackend,你会看到其描述为:
Use IR backend for Kotlin/JS compilation (default: false) —— 这正是问题根源。
⚠️ 注意事项与最佳实践
-
js 不再代表 Legacy 编译:在启用 useIrBackend=true 后,该 goal 将触发完整的 IR 编译流水线(包括 .js、.map、kotlin-js-lib.js 等产物生成),无需额外插件(如 kotlin-maven-js)。 - 确保 Kotlin 标准库兼容性:kotlin-stdlib 本身不区分平台,但若项目依赖 kotlin-stdlib-js 或其他 JS 特定库,请确认其版本与 Kotlin 编译器主版本严格一致(例如均使用 1.9.10)。
-
构建输出位置:IR 后端默认将 JS 产物输出至 target/classes/META-INF/resources/webjars/
/ /(用于 WebJars 集成)及 target/classes/ 下的模块化 JS 文件;如需自定义输出路径,请配合 或使用 kotlin-maven-plugin 的 js-executable goal。 - 调试建议:若仍报错,请检查 Maven 日志中是否出现 IR backend is not enabled 提示;同时确认 pom.xml 中无重复声明该插件(避免配置被覆盖)。
✅ 总结
启用 Kotlin/JS IR 后端仅需一行关键配置










