2014-06-25 6 views
10

Ho un progetto Android Gradle di primo livello. Ci sono diversi sottoprogetti nidificati sotto questo progetto (a volte sono 2 livello profondo) cioè:Come disabilitare lint abortOnError in Android Gradle Plugin dal livello più alto della directory multi project

top level project 
    | 
project1 

vendor libraries 
     | 
    lib1 

    lib2 

lint è abortire mia costruire in alcuni dei progetti biblioteche. Posso modificare di build.gradle ogni progetto biblioteca individuo a risolvere il problema con

android { 
    lintOptions { 
     abortOnError false 
    } 
} 

Tuttavia, io preferirei il seguente codice nel livello più alto build.gradle script:

subprojects { 

    afterEvaluate { 
     if (getPlugins().hasPlugin('android') || 
      getPlugins().hasPlugin('android-library')) { 

      println name // for debugging 

      android { 
       lintOptions { 
        abortOnError false 
       } 
      } 
     } 

    } 
} 

L'istruzione condizionale fa in modo di agganciare solo in progetti con un plug-in Android. Ho potuto farlo funzionare solo dopo aver valutato. Tuttavia, la mia build continua a non riuscire su errori di lanugine.

Qualcuno ha una soluzione pulita per iniettare queste impostazioni dal livello superiore?

UPDATE:

Riorganizzare i sottoprogetti e afterEvaluate o utilizzando allprojects ancora dà lo stesso seguente tipo di errore:

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 

posso correre gradle build con successo con la Opzione -x lint ma si desidera creare senza utilizzare le opzioni della riga di comando.

+0

guarda bene a me. Forse prova 'allprojects' invece di' sottoprogetti', o 'gradle.projectsEvaluated {}' invece di 'sottoprogetti {dopo l'esame {}}'. Controlla anche che la build stia ancora interrompendo a causa (e non solo della stampa) degli errori di sfilacciamento. –

+0

@PeterNiederwieser Apprezzo la risposta. Ho provato entrambe le combinazioni e ho ancora ricevuto gli stessi messaggi sopra. – ZenBalance

+1

Sembra più un errore fatale nell'esecuzione dell'attività lint, piuttosto che un errore di sfilacciamento. Puoi pubblicare la traccia dello stack? –

risposta

12

Anch'io affrontato una situazione simile, ma invece di modificare direttamente il DSL, ho chiamato configurare su di esso invece:

configure(android.lintOptions) { 
    abortOnError false 
} 

Di conseguenza, sono stato in grado di disattivare abortOnError per il mio sottoprogetti desiderati. Linea di fondo, il tuo blocco sottoprogetto dovrebbe assomigliare a questa:

subprojects { 

    afterEvaluate { 
     if (getPlugins().hasPlugin('android') || 
      getPlugins().hasPlugin('android-library')) { 

      println name // for debugging 

      configure(android.lintOptions) { 
       abortOnError false 
      } 
     } 

    } 
}