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

Kotlin+Java10+Maven+Java Modules组合构建失败求助

解决Kotlin 1.2.31 + Java 10模块系统编译报错问题

首先得明确:你遇到的核心问题是Kotlin 1.2.x版本对Java 9+模块系统(module-info.java)的支持不完善,再加上Kotlin Maven插件自带的重打包/着色版ASM库版本过旧,无法解析Java 9+的字节码格式,才会在ClassReader.java:2659处抛出错误。下面是具体的解决步骤:

1. 优先升级Kotlin版本(最有效方案)

Kotlin 1.2.31是2018年的老版本,当时Java模块系统刚推出,Kotlin对它的支持还处于早期阶段。官方在Kotlin 1.3.70及以上版本大幅改进了对Java模块系统的兼容性,同时更新了依赖的ASM库,能完美处理Java 9-10的字节码。

具体操作:

修改你的pom.xml中的Kotlin版本和插件版本,保持两者一致:

<properties>
    <kotlin.version>1.3.70</kotlin.version> <!-- 也可以用更高的稳定版,比如1.6.x -->
    <java.version>10</java.version>
</properties>

<build>
    <plugins>
        <plugin>
            <groupId>org.jetbrains.kotlin</groupId>
            <artifactId>kotlin-maven-plugin</artifactId>
            <version>${kotlin.version}</version>
            <executions>
                <execution>
                    <id>compile</id>
                    <goals>
                        <goal>compile</goal>
                    </goals>
                    <configuration>
                        <sourceDirs>
                            <sourceDir>${project.basedir}/src/main/kotlin</sourceDir>
                            <sourceDir>${project.basedir}/src/main/java</sourceDir>
                        </sourceDirs>
                        <jvmTarget>${java.version}</jvmTarget>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

升级后大部分模块相关的编译问题都会直接消失。

2. 旧版本临时兼容方案(不推荐,仅应急)

如果暂时无法升级Kotlin版本,可以尝试以下配置来强制编译器适配模块系统,但效果有限:
在kotlin-maven-plugin的配置中添加JVM目标和模块相关参数:

<configuration>
    <jvmTarget>10</jvmTarget>
    <args>
        <arg>-Xjvm-default=enable</arg>
        <arg>-Xmodule-path=${project.build.outputDirectory}</arg>
    </args>
</configuration>

注意:这个方案不一定能解决ASM的底层解析错误,因为1.2.31依赖的ASM确实不支持Java 9的字节码属性。

3. 排查重打包ASM的具体错误

如果你想深入排查ClassReader.java:2659的问题,可以反编译Kotlin插件中的着色版ASM:

  • 找到本地Maven仓库中kotlin-maven-plugin-1.2.31.jar的位置(路径一般是~/.m2/repository/org/jetbrains/kotlin/kotlin-maven-plugin/1.2.31)
  • 用IntelliJ IDEA或JD-GUI等反编译工具打开该Jar,定位到org.jetbrains.org.objectweb.asm.ClassReader类(注意包名是Kotlin重命名后的,不是原生的org.objectweb.asm)
  • 查看2659行的代码,通常是因为Java 9新增的ModuleAttribute等字节码属性导致解析失败。

4. 拆分模块规避问题

如果以上方案都不行,可以暂时拆分模块:

  • 将module-info.java放到一个纯Java的子模块中,单独编译
  • 让Kotlin代码所在的模块不添加module-info.java,作为自动模块(automatic module)依赖Java子模块
    这样可以避免Kotlin编译器直接处理模块系统相关的字节码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:19:48