2015-01-19 1 views
5

Ho un plug-in gradle personalizzato in cui vengono aggiunti i tipi di attività personalizzati e le configurazioni gradle. Quando applico questo plug-in prima del maven-publish, funziona perfettamente. Ma quando lo aggiungo dopo apply plugin: 'maven-publish', non riesce con messaggio di errore:plug-in gradle personalizzato: Impossibile configurare l'estensione "di pubblicazione"

FAILURE: Build failed with an exception. 

* Where: 
Build file '/scratch/skgupta/git_storage/emdi/integtest/build.gradle' line: 38 

* What went wrong: 
A problem occurred evaluating root project 'integtest'. 
> Cannot configure the 'publishing' extension after it has been accessed. 

* 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: 7.6 secs 

Ecco il file build.gradle.

buildscript { 
    repositories { 
     maven { 
      url = "${artifactory_contextUrl}/repo" 
     } 
    } 

    dependencies { 
     classpath group: 'com.mycomp.proj', name: 'MyCustomPlugin', version: "${pluginVersion}", transitive: true 
    } 
} 
apply plugin: 'java' 
apply plugin: 'maven-publish' 
apply plugin: 'MyCustomPlugin' // WHen this line is moved above maven-publish, build works fine. 

// add jar name and version 
jar.archiveName='lrgemaas_small_deploy_3n.jar' 
group = 'com.mycom.proj.test' 
version = '1.0.3' 

dependencies { 
    compile group: 'eaas.platform', name: 'registry-lookup-client', version: '0.1' 
    compile group: 'eaas.platform', name: 'registry-client', version: '0.1' 
    compile configurations.lrgConfig // This configuration is added by MyCustomPlugin 
    compile configurations.webdriver // This configuration is added by MyCustomPlugin 
} 

repositories { 
    maven { 
     url = "${artifactory_contextUrl}/repo" 
    } 
} 

publishing { 
    publications { 
     myPublicationName(MavenPublication) { 
      artifactId 'lrgemaas_small_deploy_3n' 
      artifact jar.archivePath 
     } 
    } 
    repositories { 
     maven { 
      url = "${artifactory_contextUrl}/${artifactory_repoName}" 
      credentials { 
       username = "${artifactory_user}" 
       password = "${artifactory_password}" 
      } 
     } 
    } 
} 

// workflow for build 
defaultTasks 'clean','build','publish' 

PS: Ho provato a fare nulla nel plugin personalizzato (vale a dire, semplicemente restituito dal metodo a pagamento), ma dà ancora lo stesso errore.

+0

sembra simile a questo: http://stackoverflow.com/questions/21190230/how-can-plugin-programmatically-configure-maven-publish-publishing-and-allow-bui –

risposta

32

semplice sostituzione:

publishing { 
    publications { 
     ... 
    } 
} 

con i seguenti:

publishing.publications { 
    ... 
} 

lavorato per me!

+1

questo ha funzionato anche per me. ..Grazie Vinay – John

+1

Siamo passati ad Android Studio 2.1 e abbiamo iniziato ad avere questo problema con il volley aggiunto come sottomodulo. Questa soluzione ha funzionato per noi. –

+3

Strano ... questo lo ha risolto anche per me. Altri suggeriscono di scambiare l'ordine di dichiarazione dei plugin, ma questo non ha aiutato il mio caso. Esperienza con gradlew 2.13 – javajon

1

Gradle è fragile per quanto riguarda l'ordine dei plugin. C'è una discussione su questo problema esatto in

https://discuss.gradle.org/t/apply-maven-publish-plugin-from-init-script/2460

"Cool, quindi questo è ciò che accade.

DefaultPublishingExtension che sta sostenendo la 'pubblicazione {}' blocco è un DeferredConfigurable. Si tratta di una meccanismo che consente di registrare un blocco di configurazione da eseguire quando si accede a un'estensione. Sfortunatamente a volte provoca un comportamento imprevisto se si accede inconsapevolmente a questo tipo di estensione. Questo è esattamente il caso in cui, ad esempio, si tenta di ottenere tutte le proprietà di un progetto (come il plugin di rilascio fa qui: https://github.com/townsfolk/gradle-release/blob/master/src/main/groovy/release/PluginHelper.groovy#L230 "

0

Ho aggiornato la versione gradle dalla 2.1 alla 2.12 e ho risolto questo problema.

+0

per chi è interessato alla correzione, vedere https://github.com/researchgate/gradle-release/issues/125 –

1

FYI, utilizzo una versione dinamica e ho scoperto che dovevo definire la versione prima di applicare i miei plugin. Probabilmente perché java o maven-publish imposta i dettagli della pubblicazione su richiesta.