問題
在Gradle版本升級(jí)后,編譯運(yùn)行項(xiàng)目時(shí),提示org.gradle.api.internal.tasks.compile.CompilationFailedException: Compilation failed;但沒有列出錯(cuò)誤的具體原因稠屠。我們無法根據(jù)現(xiàn)有的編譯log找出錯(cuò)誤所在,如下:
根據(jù)報(bào)錯(cuò)內(nèi)容繁堡,可以看出是執(zhí)行compileDebugJavaWithJava任務(wù)時(shí)報(bào)的錯(cuò)誤榴鼎。異常為:TaskExecutionException(任務(wù)執(zhí)行錯(cuò)誤)并被告知編譯失敗異常(CompilationFailedException)。
解決
我們可以使用gradlew命令在命令行中來單獨(dú)執(zhí)行報(bào)錯(cuò)任務(wù)澳腹,并打印出具體錯(cuò)誤信息织盼,我遇到的報(bào)錯(cuò)的taskName為compileDebugJavaWithJavac,那么命令如下:
gradlew compileDebugJavaWithJavac --stacktrace --info
運(yùn)行后會(huì)看到具體的錯(cuò)誤酱塔,如下:
我這邊遇到的問題單獨(dú)執(zhí)行報(bào)錯(cuò)任務(wù)后沥邻,也沒有具體詳細(xì)的錯(cuò)誤信息(大部分異常可以直接看到詳細(xì)的錯(cuò)誤信息)
但是可以看到lib_common模塊下databinding相關(guān)的報(bào)錯(cuò)信息延旧,于是解決android.databinding.tool.expr.Expr.resolveListeners(Expr.java:211)相關(guān)的異常谋国,這個(gè)異常是因?yàn)樵趚ml文件中使用了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中定義了一個(gè)ObservableBoolean flag集畅,不要使用flag.get()
總結(jié)
在編譯時(shí)遇到CompilationFailedException近弟,并沒有詳細(xì)報(bào)錯(cuò)信息時(shí),單獨(dú)執(zhí)行報(bào)錯(cuò)任務(wù)
gradlew taskName(報(bào)錯(cuò)任務(wù)名稱祷愉,需具體替換) --stacktrace --info
然后獲取到具體報(bào)錯(cuò)信息后,解決相應(yīng)的報(bào)錯(cuò)問題,重新編譯二鳄。