2014-10-20 19 views
5

Come posso eseguire un altro gradle script da gradle. Ho più script gradle per eseguire test sotto la directory <root_project>/test. <root_project>/build.gradle viene richiamato con il nome del file gradle di prova da eseguire. Per esempioCome eseguire lo script gradle dal gradle

gradle run_test -PtestFile=foobar

Questo dovrebbe funzionare <root_project>/test/foobar.gradle (attività predefinite di esso)

Quello che sto facendo attualmente è invocare project.exec nel compito run_test. Questo funziona, ma ora ho bisogno di passare le proprietà del progetto dal processo gradle in esecuzione run_test a quello che esegue foobar.gradle

Come posso fare questo? Esiste un modo più integrato di graduazione per eseguire uno script gradle da un altro, passando tutte le informazioni richieste allo script gradle secondario?

risposta

4

faccio qualcosa di simile in cui un "costrutto" compito in una mano Gradle fuori ad un " esegue "attività in un altro file gradle in una directory che ha creato (chiamato artefatto) e passa attraverso tutte le proprietà del progetto.

Ecco il codice rilevante per l'handoff:

def gradleTask = "yourTaskToEventuallyRun" 
def artefactBuild = project.tasks.create([name: "artefactBuild_$gradleTask", type: GradleBuild]) 
artefactBuild.buildFile = project.file("${artefactDir}/build.gradle") 
artefactBuild.tasks = [gradleTask] 

// inject all parameters passed to this build through to artefact build 
def artefactProjectProperties = artefactBuild.startParameter.projectProperties 
def currentProjectProperties = project.gradle.startParameter.projectProperties 
artefactProjectProperties << currentProjectProperties 
// you can add more here 
// artefactProjectProperties << [someKey: someValue] 

artefactBuild.execute() 
+0

Grazie. Funziona :) –

+0

@SundeepGupta felice di poterti aiutare. –

1

Abbastanza strano requisito. Potresti fornire ulteriori dettagli? Che ci sia un altro modo più semplice per farlo.

Tuttavia, è possibile farlo con Gradle Tooling API. Puoi trovare i documenti API here e ProjectConnection è il miglior punto di partenza.

+0

mi permetta di provare questo. –

+0

Funziona, ma si sente poco complesso rispetto ad altre soluzioni. –

+0

Sicuro, felice Hai risolto il tuo problema. – Opal

1

Se si desidera specificare un altro script Gradle, è possibile utilizzare:

gradle --build-file anotherBuild.gradle taskName 

o

gradle -b anotherBuild.gradle taskName 
Problemi correlati