El nombre de la carpeta interface
resulta en
Introducido debajo del Module
nivel build.gradle
, apply plugin: 'kotlin-kapt'
aparece el siguiente mensaje de error al construir.
public abstract class BaseStateActivity<T extends androidx.databinding.ViewDataBinding, E extends xxxx.BaseVM> extends xxxxx.BaseVMActivity<T> implements xxxxx.IBindVm<E> {错误: 非法的类型开始
public abstract class BaseStateActivity<T extends androidx.databinding.ViewDataBinding, E extends xxxxx.BaseVM> extends xxxxx.BaseVMActivity<T> implements xxxxx.IBindVm<E> {错误: 需要';'
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':app:kaptDebugKotlin'.
> A failure occurred while executing org.jetbrains.kotlin.gradle.internal.KaptExecution
> java.lang.reflect.InvocationTargetException (no error message)
problema resuelto:
Por desgracia, este problema me ha molestado durante demasiado tiempo. Más tarde vi en stackoverflow que un tipo desafortunado entró en este pozo. Se paró unos días antes que yo y tardó una semana en resolverlo, pero afortunadamente lo resolvió. 0.0. La razón de este problema es que hay una carpeta interface
nombrada en mi proyecto, y hay una interfaz en interface
esta carpeta . Esta palabra clave se usa como el nombre de la carpeta para confundir al anotador, y finalmente se genera el stub. interface
Algo salió mal. Más tarde cambió el nombre de la carpeta a otro.
DataBinding
La gramática conduce a
Cuando aparezca lo siguiente, log
debe hacer clic con el mouse para Run with --stacktrace
ver la información detallada por sí mismo.
* What went wrong:
Execution failed for task ':app:kaptDebugKotlin'.
> A failure occurred while executing org.jetbrains.kotlin.gradle.internal.KaptExecution
> java.lang.reflect.InvocationTargetException (no error message)
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
Mi vista personalizada agrega la función de enlace bidireccional, pero la descuidé cuando la escribí y la escribí así
app:y_change_content="@={}"
Luego, registre la impresión al construir What went wrong
, haga clic para Run with --stacktrace
obtener la siguiente información
Caused by: android.databinding.tool.util.LoggedErrorException: Found data binding error(s):
[databinding] {"msg":"Syntax error: no viable alternative at input \u0027\u003cEOF\u003e\u0027","file":"app\\src\\main\\res\\layout\\fragment_employment_info.xml","pos":[{"line0":54,"col0":41,"line1":54,"col1":44}]}
El mensaje anterior es muy claro, la sintaxis es incorrecta y se ha localizado la línea del error.
Java
El nombre de la Kotlin
clase es el mismo que el nombre de la clase.
La clase Java tiene el mismo nombre que la clase Kotlin. A veces, Studio no mostrará una línea roja en el directorio. En este momento, creará otra KaptExecution
. Haga clic para Run with --stacktrace
obtener la siguiente información.
Caused by: org.gradle.workers.internal.DefaultWorkerExecutor$WorkExecutionException: A failure occurred while executing ...
Caused by: java.lang.reflect.InvocationTargetException
Caused by: com.sun.tools.javac.util.ClientCodeException: java.lang.IllegalStateException: node.sym must not be null
Caused by: java.lang.IllegalStateException: node.sym must not be null
Bajo el nombre de la clase de nuevo y reconstruir suficiente.
Fuente
- Actualización 18/12/2020
La interfaz no escribió claramente el nombre del paquete.InvocationTargetException
- Problema: después de la introducción
apply plugin: 'kotlin-kapt'
, el proyecto de compilación informó un error. Lo usékoin
para la inyección de dependencias. Después de la compilación, descubríRetrofit
que no se podía encontrar elAPI
objeto de proxy dinámico que se creó . Siempre que elimine el introducido,kotlin-kapt
puede ser compilado normalmente. - Motivo: Al final, se descubrió que no había ningún nombre de paquete en el archivo de clase de la interfaz de proxy, lo que provocó que no se encontrara la interfaz de proxy dinámica cuando se compilaron todas las clases que usaban la interfaz. Sin embargo,
kotlin-kapt
después de la eliminación , no aparecerá ningún nombre de paquete no afectará a la compilación del proyecto.
Por ejemplo:
// 包名.如果把这个去掉,我用的是koin进行依赖注入的,当引入'kotlin-kapt'编译就会提示EZLoanApiService这个接口找不到.移除就能正常编译.
package com.xxx.xxx.netxx
interface ApiService {
@GET(CHECK_PHONE_EXIST)
suspend fun checkPhone(@QueryMap mData: TreeMap<String, Any>): BResponse<CheckPhoneExist>
}