Cómo deshabilitar lint abortOnError en Android Gradle Plugin desde el nivel superior del directorio de proyectos múltiples
Tengo un nivel superior de Android Gradle proyecto. Hay varios subproyectos anidados debajo de estos proyectos (a veces son de 2 niveles), es decir:
top level project | project1 vendor libraries | lib1 lib2
Lint está abortando mi compilación en algunos de los proyectos de las bibliotecas. Puedo editar cada build.gradle
cada proyecto de biblioteca individual para solucionar el problema con
- Error: Tiempo de espera esperando para bloquear caché de clase buildscript para el archivo de construcción cuando cambia minSdkVersion
- EXCEPCIÓN INESPERADA DE SUPERIOR NIVEL: com.android.dex.DexIndexOverflowException dependencias de fusión
- ¿Qué significa realmente "Proyecto de sincronización con archivo Gradle"?
- No se puede firmar la versión APK -: app: shrinkReleaseMultiDexComponents FALLED
- En una versión de gradle de Android, ¿cómo cambiar el nombre del paquete por tipo de compilación?
android { lintOptions { abortOnError false } }
Sin embargo, yo preferiría el siguiente código en el script build.gradle
nivel superior:
subprojects { afterEvaluate { if (getPlugins().hasPlugin('android') || getPlugins().hasPlugin('android-library')) { println name // for debugging android { lintOptions { abortOnError false } } } } }
La instrucción condicional se asegura de enganchar sólo en proyectos con un complemento de Android. Sólo podría conseguir esto para trabajar con afterEvaluate. Sin embargo, mi compilación sigue fallando en errores de pelusa.
¿Alguien tiene una solución limpia para inyectar estos ajustes desde el nivel superior?
ACTUALIZAR:
Reordenar los subproyectos y afterEvaluate o usar allprojects sigue dando el mismo tipo de error siguiente:
7: Task failed with an exception. ----------- * What went wrong: Execution failed for task ':3rdparty:OrmLiteQueryBuilder:lint'. > [Ljava/util/HashMap$Entry; * Try: Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. ============================================================================== BUILD FAILED Total time: 40.528 secs
Stacktrace:
7: Task failed with an exception. ----------- * What went wrong: Execution failed for task ':3rdparty:OrmLiteQueryBuilder:lint'. > [Ljava/util/HashMap$Entry; * Try: Run with --info or --debug option to get more log output. * Exception is: org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':3rdparty:OrmLiteQueryBuilder:lint'. at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:69) at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:46) at org.gradle.api.internal.tasks.execution.PostExecutionAnalysisTaskExecuter.execute(PostExecutionAnalysisTaskExecuter.java:35) at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:64) at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:58) at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:42) at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52) at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:53) at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43) at org.gradle.api.internal.AbstractTask.executeWithoutThrowingTaskFailure(AbstractTask.java:286) at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.executeTask(AbstractTaskPlanExecutor.java:79) at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.processTask(AbstractTaskPlanExecutor.java:63) at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.run(AbstractTaskPlanExecutor.java:51) at org.gradle.internal.concurrent.DefaultExecutorFactory$StoppableExecutorImpl$1.run(DefaultExecutorFactory.java:66) Caused by: java.lang.NoClassDefFoundError: [Ljava/util/HashMap$Entry; at com.android.build.gradle.internal.dsl.LintOptionsImpl$1.$getStaticMetaClass(LintOptionsImpl.groovy) at com.android.build.gradle.internal.dsl.LintOptionsImpl$1.<init>(LintOptionsImpl.groovy) at com.android.build.gradle.internal.dsl.LintOptionsImpl.syncTo(LintOptionsImpl.groovy:450) at com.android.build.gradle.internal.dsl.LintOptionsImpl$syncTo.call(Unknown Source) at com.android.build.gradle.tasks.Lint.lintAllVariants(Lint.groovy:105) at com.android.build.gradle.tasks.Lint$lintAllVariants.callCurrent(Unknown Source) at com.android.build.gradle.tasks.Lint.lint(Lint.groovy:63) at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:63) at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.doExecute(AnnotationProcessingTaskFactory.java:219) at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:212) at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:201) at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:530) at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:513) at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:80) at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:61) ... 13 more Caused by: java.lang.ClassNotFoundException: java.util.HashMap$Entry ... 28 more ============================================================================== BUILD FAILED Total time: 2 mins 20.757 secs
Puedo ejecutar gradle build
con éxito con la opción -x lint
pero quiero construir sin usar las opciones de línea de comandos.
- Error al ejecutar el proyecto de Android (escrito en Kotlin) compilado con el complemento Gradle2.0.0-alpha
- Intellij + gradle + robolectric + espresso
- Git - checkout código git remoto en Android Studio proyecto importado con Gradle construir
- Paquete de prueba para diferentes sabores en Android Studio
- Cómo obtener sabor actual en gradle
- Gradle: Error de ejecución para la tarea ': processDebugManifest'
- Cómo importar RecyclerView para Android L-preview
- La red es inaccesible: connect
Yo también me enfrentaba a una situación similar, pero en lugar de simplemente modificar el DSL directamente, he llamado a configurar en su lugar:
configure(android.lintOptions) { abortOnError false }
Como resultado, pude desactivar abortOnError para los subproyectos deseados. En pocas palabras, el bloque del subproyecto debería verse así:
subprojects { afterEvaluate { if (getPlugins().hasPlugin('android') || getPlugins().hasPlugin('android-library')) { println name // for debugging configure(android.lintOptions) { abortOnError false } } } }
- Prácticas recomendadas para la prueba de unidades de Android?
- Constructores de aplicaciones: cómo evaluar su valor?