java.lang.inter,Gradle 5 IntelJ java.lang.AbstractMethodError

f9951d5506fc

gradle-error-1

Idea导入gradle项目报错,错误信息如下:

java.lang.AbstractMethodError: org.jetbrains.plugins.gradle.tooling.util.ModuleComponentIdentifierImpl.getModuleIdentifier()Lorg/gradle/api/artifacts/ModuleIdentifier;

在尝试解决这个问题之前,我们首先要明白java.lang.AbstractMethodError是什么。从AbstractMethodError的文档可以看到“Thrown when an application tries to call an abstract method”,也就是说当一个抽象方法被调用的时候回抛出这个异常。但是为什么抽象方法会被调用呢?

下图就展示了这个情况:

f9951d5506fc

AbstractMethodError -1-

首先,在编译期间,我们在ClassA里引用版本1的ClassB的method1方法,在这个版本里,method1还是有具体实现的,编译也能够正常进行,所以我们给ClassA所在的包打包成一个jar包。但是,在我们引入ClassB的时候,ClassB这时候进行了版本升级,ClassB变成了抽象类,method1方法也变成了抽象(Abstract)方法,这个时候ClassA再去调用ClassB的method1才发现已经没有对应的实现了,所以才会抛出java.lang.AbstractMethodError。这种情况下,因为没有重新编译,所以这个错误到运行期才出现。

那么,对应到我们这个问题上来,就是gradle在升级的时候,有jar包出现了版本兼容的问题。从gradle的这个issuse可以看到,gradle 5目前对Android Studio和intelliJ都有兼容性问题,目前建议的解决方案是降级到版本4。

我在intelliJ上的解决方案是:IntelIiJ IDEA -> Preferences -> Build,Execution, Deployment -> Build Tools -> Gradle,勾选`Use gradle 'wrapper' task configuration',重新导入,gradle任务就可以正常执行了。

f9951d5506fc

gradle-config

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值