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

 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.

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 } } } } 
  • Kotlin - Error intermitente de "archivo de clase incorrecta"
  • Android: ¿Cómo cambiar el nombre específico del archivo apk generado en Android Studio?
  • Pruebas unitarias con Android Studio y Gradle?
  • Signature globalConfig para la construcción de varios proyectos
  • Diferencia entre compilar vs compilar árbol vs compilar archivos?
  • Manifiesto del proceso Gradle con la nueva fusión de manifiesto
  • Recursos de la biblioteca gradle de Android en el sabor del producto
  • NoClassDefFoundError al usar Dagger 2 después de cambiar a Android Studio 2.0
  • Módulo hermano de importación en Android Studio
  • Entrada duplicada de Zip después de Gradle Plugin v0.13.1
  • Android Studio no compila cuando se utiliza la API obsoleta
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.