Gradle-Projekte je nach Artefakten erstellt von Geschwister-Projekte

Habe ich das Gradle-setup mit vier Projekten, die ein Elternteil mit drei Kindern, wo ein Java-Servlet, JSON 'backend' ist gebaut in einen Krieg-Datei, und dann eine statische HTML5 'frontend' konsumieren diese in einer zip. Diese beiden "installiert" Ihre artifcats auf das lokale maven-repo.

Das Dritte Geschwister-Projekt 'Fusion' ist abhängig von diesen zwei Artefakte, zum Aufbau einer "merged" den Krieg, indem Sie einfach "zippen Sie zusammen".

Jedoch, einmal hatte ich das laufen als gedacht, ich hatte offensichtlich zu test der bootstrap-Szenario durch löschen der Artefakte aus dem lokalen repo.

Nun habe ich plötzlich ein "Artefakt 'no.company:frontend:1.0-SNAPSHOT@zip" nicht gefunden".

Ist es nicht möglich, angewiesen auf Artefakte, die produziert werden durch die aktuelle build?

Edit:

Basiert auf einer anderen Idee (und die Antwort von Peter entmutigend das Maven-Logik), diese version sieht vielversprechend aus, nicht durchqueren Maven (Hinweis: es funktioniert!):

//## From frontend's build.gradle:
task zipFrontend(dependsOn: 'buildFrontend',  type: Zip) {
    from ('dist/')
}

//## From backend's build.gradle:
apply plugin: 'war'

//## From merger's build.gradle:
task mergeFrontAndBack(dependsOn: [':backend:war', 
                                   ':frontend:zipFrontend'], type: War) {
    from zipTree(project(':frontend').tasks['zipFrontend'].archivePath)
    from zipTree(project(':backend').tasks['war'].archivePath)
    destinationDir(buildDir)
}

Edit 2:

Basiert auf Peter ' s Kommentar über das nicht erreichen in der Geschwister-Projekt Struktur und seine konkreten Vorschläge, hier ist das entstandene Werk (Hinweis: es funktioniert!):

//## From frontend's build.gradle:
task zipFrontend(dependsOn: 'buildFrontend',  type: Zip) {
    from ('dist/')
}
configurations { zip }
artifacts { zip zipFrontend }

//## From backend's build.gradle:
apply plugin: 'war'
configurations { jsonOnlyWar }
artifacts { jsonOnlyWar war }

//## From merger's build.gradle:
configurations { merge }
dependencies {
    merge project(path: ':backend', configuration: 'jsonOnlyWar')
    merge project(path: ':frontend', configuration: 'zip')
}
task mergeFrontAndBack(dependsOn: configurations.merge, type: War) {
    from { configurations.merge.collect { zipTree(it) } }
    destinationDir(buildDir)
}
InformationsquelleAutor stolsvik | 2013-07-26
Schreibe einen Kommentar