2013-06-11 7 views
8

Probieren, um meinen Kopf herumzukommen, wenn es möglich ist, Aufgaben aus anderen Projekten in Gradle zu verwenden. Lassen Sie uns sagen ProjectB ist ein Projekt mit src/main/groovy com.MyTask enthält, Eltern ProjectA mitGradel Abhängigkeit zu Projekt in Buildscript

In build.gradle in ProjectC, auch mit Mutter ProjectA:

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

die legit zu sein scheint, weil einen Tippfehler in "Projekt (: 'ProjectB')" zu lösen, fällt schwer. Was auch fehlschlägt, ist die folgende Zeile:

import com.MyTask 

Sind Projektreferenzen im BuildScript-Abschluss nicht gültig? Versuchen Sie auch com.MyTask zu BuildSrc/src/main/groovy mit der gleichen Menge an Erfolg zu bewegen.

Antwort

4

Die Lösung, die für mich gearbeitet wurde zu „com.MyTask“ verfügbar sowohl auf Configuration und in Quellen zu machen. ProjectA (die Eltern) bekam diese hinzugefügt buildSrc/build.gradle des sourceSets:

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

Jetzt ProjectC und alle anderen Projekte MyTask nutzen können. Gleichzeitig wird es mit dem finalen Krug von ProjectB gebündelt. http://gradle.1045684.n5.nabble.com/buildSrc-as-a-regular-project-td5677255.html

Edit:: Es war schlauer Manipulieren Eltern buildSrc als das Standalone-Projekt

Das Problem wurde auch gründlich zwischen zwischen Adam Murdoch, Luke Daley und Steve Ebersole diskutiert. So ist IntelliJ glücklich.

+0

"IntelliJ mochte es nicht "haha, nein, ich wette, es hat nicht getan. –

+0

Haha! Entschuldige, dass du die Antwort so bearbeitet hast, wie du @ mike-rylander kommentiert hast! – judoole

+0

Vielen Dank, dass Sie herausgefunden haben, wie Sie IntelliJ glücklich machen können. –

0

Von Gradle Dokumentation 15.4. Adding dependencies to a task:

Beispiel 15.13. Hinzufügen Abhängigkeit von Aufgabe aus einem anderen Projekt

build.gradle 

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

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

Guter Anruf! Aber ich habe das Problem vielleicht nicht klar genug angegeben. Es sind keine definierten Aufgaben, die ich verwenden möchte, es sind Aufgaben, die im Klassenpfad erstellt wurden. Zum Beispiel funktioniert das Exportieren von ProjectC in mavenLocal() und das Importieren von ProjectC in ProjectB in Buildscript. Dann ist die MyTask verfügbar. – judoole

+0

Auch versucht, eine "MyTask" bei ProjectC und DependOn in ProjectB zu definieren, aber ich konnte nicht als "MyTask" in Src/Main/Gradle und nicht in BuildSrc/Src/Main/Gradle. – judoole

+0

@ OleChristianLangfjæran hast du auf ch 15.2 geschaut? hast du versucht 'tasks.getByPath ('MyTask')' –

Verwandte Themen