现有Java项目中Kotlin简单反射功能无法正常运行
Kotlin代码运行抛出NoSuchMethodError的排查与解决
异常本质
java.lang.NoSuchMethodError: 'void kotlin.jvm.internal.PropertyReference1Impl.<init>(java.lang.Class, java.lang.String, java.lang.String, int)'这个错误,核心原因是编译时使用的Kotlin类库版本,和运行时加载的版本不一致。
PropertyReference1Impl的构造方法签名在Kotlin不同版本中存在变更,你编译代码用的是Kotlin 1.7.20,但运行时可能有更低版本的kotlin-stdlib或kotlin-reflect被优先加载,导致找不到对应构造方法。
排查与解决步骤
1. 定位依赖冲突
执行Gradle命令打印完整的运行时依赖树,找出引入旧版本Kotlin库的第三方依赖:
./gradlew dependencies --configuration runtimeClassPath
重点查找org.jetbrains.kotlin:kotlin-stdlib、kotlin-stdlib-jdk7、kotlin-stdlib-jdk8、kotlin-reflect这些依赖,看是否有版本低于1.7.20的条目——这些就是冲突根源。
2. 强制统一Kotlin版本
在build.gradle.kts中添加版本强制规则,确保所有Kotlin相关依赖都使用指定的1.7.20版本,覆盖第三方依赖引入的旧版本:
configurations.all { resolutionStrategy { force("org.jetbrains.kotlin:kotlin-stdlib:1.7.20") force("org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.7.20") force("org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.7.20") force("org.jetbrains.kotlin:kotlin-reflect:1.7.20") } }
3. 清理缓存并重新构建
执行命令清理旧的编译产物和Gradle缓存,避免残留的旧版本类文件干扰:
./gradlew clean build
补充说明
纯Kotlin项目能正常运行,是因为它的依赖链更纯净,没有引入携带旧版本Kotlin库的第三方依赖,不会出现版本冲突问题。
内容的提问来源于stack exchange,提问作者user1064504
相关产品推荐
相关产品推荐

