2013-06-11 19 views
8

Cercare di capire se è possibile utilizzare Attività da altri progetti in Gradle. Diciamo ProjectB è un progetto con src/main/Groovy contenente com.MyTask, avendo genitore ProjectADipendenza gradle da progettare in buildscript

In build.gradle in ProjectC, anche avendo genitore ProjectA:

buildscript { 
    dependencies{ 
     project(':ProjectB') 
    } 
} 

che sembra essere legittime, perché Introduzione di un errore di battitura in "project (: 'ProjectB')" non riesce. Ciò che anche fallisce sta introducendo questa linea:

import com.MyTask 

è il progetto riferimenti non è valido per la chiusura buildscript? Ho anche provato a spostare com.MyTask per costruireSrc/src/main/groovy con la stessa quantità di successo.

risposta

4

La soluzione che ha funzionato per me è stato quello di rendere "com.MyTask", disponibile sia a configurationtime e nelle fonti. ProjectA (il genitore) ha ottenuto questo aggiunto al sourceSets buildSrc/di build.gradle:

sourceSets{ 
    main{ 
     groovy{ 
      srcDir 'ProjectB/src/main/groovy' 
     } 
    } 
} 

Ora ProjectC e tutti gli altri progetti possono utilizzare MyTask. Allo stesso tempo è in bundle con il vaso finale di ProjectB.

La questione è stata anche discussa a fondo tra tra Adamo Murdoch, Luke Daley e Steve Ebersole: http://gradle.1045684.n5.nabble.com/buildSrc-as-a-regular-project-td5677255.html

Edit: E 'stato più intelligente manipolazione genitore buildSrc rispetto al progetto standalone. In questo modo, IntelliJ è felice e fortunato.

+0

"IntelliJ non mi è piaciuto "haha, no, scommetto che non ha funzionato. –

+0

Haha! Ci scusiamo per aver modificato la risposta proprio come hai commentato @ mike-rylander! – judoole

+0

Grazie per aver capito come rendere IntelliJ felice. –

0

Da Gradle documentazione 15.4. Adding dependencies to a task:

Esempio 15.13. L'aggiunta di dipendenza compito da un altro progetto

build.gradle 

project('projectA') { 
    task taskX(dependsOn: ':projectB:taskY') << { 
     println 'taskX' 
    } 
} 

project('projectB') { 
    task taskY << { 
     println 'taskY' 
    } 
} 
+0

Buona chiamata! Ma potrei non aver dichiarato il problema abbastanza chiaro. Non si tratta di compiti definiti che voglio utilizzare, ma di Task creati sul classpath. Ad esempio, esportare ProjectC in mavenLocal() e importarlo in ProjectB in buildscript funziona bene. Quindi il MyTask è disponibile. – judoole

+0

Anche provato a definire un "MyTask" a ProjectC e dependOn che in ProjectB, ma non ero in grado di come "MyTask" è in src/main/gradle e non in buildSrc/src/main/gradle. – judoole

+0

@ OleChristianLangfjæran hai guardato ch 15.2? hai provato 'tasks.getByPath ('MyTask')' –

Problemi correlati