问题
在Gradle版本升级后,编译运行项目时,提示org.gradle.api.internal.tasks.compile.CompilationFailedException: Compilation failed;但没有列出错误的具体原因。我们无法根据现有的编译log找出错误所在,如下:
根据报错内容,可以看出是执行compileDebugJavaWithJava任务时报的错误。异常为:TaskExecutionException(任务执行错误)并被告知编译失败异常(CompilationFailedException)。
解决
我们可以使用gradlew命令在命令行中来单独执行报错任务,并打印出具体错误信息,我遇到的报错的taskName为compileDebugJavaWithJavac,那么命令如下:
gradlew compileDebugJavaWithJavac --stacktrace --info
运行后会看到具体的错误,如下:
我这边遇到的问题单独执行报错任务后,也没有具体详细的错误信息(大部分异常可以直接看到详细的错误信息)
但是可以看到lib_common模块下databinding相关的报错信息,于是解决android.databinding.tool.expr.Expr.resolveListeners(Expr.java:211)相关的异常,这个异常是因为在xml文件中使用了get()方法,去掉get()方法后重新编译,编译成功。
android.databinding.tool.expr.Expr.resolveListeners异常解决链接:
stackoverflow:
https://stackoverflow.com/questions/58763363/when-building-android-project-with-android-gradle-plugin-v-3-5-2-my-builds-fail
解决方法:
去除xml文件中databing熟悉的get()方法,如在xml中定义了一个ObservableBoolean flag,不要使用flag.get()
总结
在编译时遇到CompilationFailedException,并没有详细报错信息时,单独执行报错任务
gradlew taskName(报错任务名称,需具体替换) --stacktrace --info
然后获取到具体报错信息后,解决相应的报错问题,重新编译。