升级Kotlin至1.8后JDK17下Maven Kotlin插件构建失败求助
解决Kotlin 1.8 + JDK 17 Maven构建的InaccessibleObjectException问题
这个报错的核心原因是JDK 17的模块系统禁止了未命名模块对java.io包的反射访问,报错栈里的com.intellij.util.io.IOUtil属于kotlin-maven-plugin自身的依赖代码,不是业务代码或Kotlin编译逻辑。你之前添加的<args>是传给Kotlin编译器(kotlinc)的参数,对插件自身运行时的JVM权限没有作用,所以问题没解决。
正确的做法是给kotlin-maven-plugin的JVM进程添加模块开放参数,需要用<jvmArgs>配置项,而非<args>。修改后的Maven插件配置如下:
<plugin> <artifactId>kotlin-maven-plugin</artifactId> <groupId>org.jetbrains.kotlin</groupId> <version>${kotlin.version}</version> <configuration> <jvmTarget>${java.version}</jvmTarget> <!-- 给插件自身的JVM进程添加模块访问权限 --> <jvmArgs> <jvmArg>--add-opens java.base/java.io=ALL-UNNAMED</jvmArg> </jvmArgs> </configuration> <!-- 绑定编译、测试编译目标 --> <executions> <execution> <id>compile</id> <phase>compile</phase> <goals> <goal>compile</goal> </goals> </execution> <execution> <id>test-compile</id> <phase>test-compile</phase> <goals> <goal>test-compile</goal> </goals> </execution> </executions> </plugin>
补充说明:Kotlin 1.8完全支持JDK 17,这个场景是官方支持的,只是Maven插件配置需要区分「编译器参数」和「插件运行时JVM参数」。
内容的提问来源于stack exchange,提问作者arcuri82
相关产品推荐
相关产品推荐

