2017-06-07 1 views
1

Ich habe ein Projekt, das so aussieht.Gradle - Ausführungsreihenfolge Problem

root 
    build.gradle 
    settings.gradle 
    project1 
     build.gradle 

    project2 
     build.gradle 

    project3 
     build.gradle 

    project4 
     build.gradle 

settings.gradle sieht so aus.

include ':project1', ':project2', ':project3', ':project4' 

build.gradle (von der Wurzel)

apply plugin: 'java' 
apply plugin: 'eclipse' 

repositories { 
    mavenCentral() 
} 
dependencies { 
    compile project(':project1') 
    compile project(':project2') 
    compile project(':project3') 
    compile project(':project4') 
} 

Also im Grunde, ich will 'project1', bevor project2 gebaut werden, 3, 4, weil es unsere interne Abhängigkeit (jar herunterladen muss und einige Schemadateien), so dass Projekt2, 3 und 4 Artefakte aus den Schemadateien (aus Projekt1) extrahieren können.

Aber wenn ich es ausführe, sehe ich Standardausgabe von Projekt2 und 3 gedruckt zuerst, bevor Projekt1 läuft.

Insbesondere Projekt2 enthält viele Aufgaben (Typ: JavaExec), die diese Art von Argumenten ausführen.

main = 'org.apache.xmlbeans.impl.tool.SchemaCompiler' 
    classpath "${BUILDROOT}/project1/${COMMON_DENEPDENCY_FILE}" 
    args "-src", "${projectDir}/src/main/java", "-d", "build/generated", "-srconly", "${projectDir}/xml/schema/example1.xsd", "${projectDir}/xml/schema/example1.xsdconfig" 

Eine der Aufgaben sieht so aus. Ich habe mehrere Aufgaben, die in Projekt2 so aussehen. Daher muss project1 vollständig erstellt sein, bevor project2 und project3 ausgeführt werden können.

build.gradle von project2

task xmlbeansExample2(dependsOn: xmlbeansExample1, type: JavaExec) { 
    println "Example2 is running" 
    main = 'org.apache.xmlbeans.impl.tool.SchemaCompiler' 
    classpath "${BUILDROOT}/common/${COMMON_DENEPDENCY_FILE}" 
    args "-src", "${projectDir}/src/main/java", "-d", "build/generated", "-srconly", "${projectDir}/xml/schema/example2.xsd", "${projectDir}/xml/schema/example2.xsdconfig" 
    println "Example2 is done" 
} 
task handleSchema(dependsOn: ['xmlbeansExample1', 'xmlbeansExample2']) 

build.dependsOn handleSchema, jar 

Wenn ich laufen 'Gradle build' von der Wurzel oder project2 sehe ich den Ausdruck aus project2 zuerst.

Ist etwas mit meinem Layout nicht in Ordnung?

Mein Team migriert von Ant nach Gradle, aber Gradle scheint etwas anders zu sein als Ant. Vielleicht bin ich etwas missverstanden über die Größe.

Antwort

0

Nun, für Root-Projekt ist es unnötig, untergeordnete Module als Abhängigkeiten anzugeben.

Wenn Ihre Module von einem anderen abhängig sind, sollten Sie diese Abhängigkeit klar definieren.

// project2/build.gradle 
dependencies { 
    compile project(':project1') 
}