Projekty Gradle w zależności od artefaktów stworzonych przez projekty rodzeństwa

Mam tę konfigurację Gradle z czterema projektami, rodzicem z trojgiem dzieci, w którym Java Servlet JSON „backend” jest wbudowany w plik wojny, a następnie statyczny HTML-owy „frontend” zużywający ten plik jest wbudowany w zip. Obie te „instalują” swoje artefakty na lokalnym repozytorium mavenów.

Trzeci projekt „fuzji” rodzeństwa zależy od tych dwóch artefaktów, aby stworzyć „połączoną” wojnę, po prostu „łącząc je”.

Jednakże, kiedy już to zrobiłem i uruchomiłem zgodnie z przeznaczeniem, oczywiście musiałemprzetestuj scenariusz ładowania początkowego, usuwając artefakty z lokalnego repozytorium.

Teraz nagle otrzymuję „Artifact” no.company:frontend:1.0-SNAPSHOT@zip „not found”.

Czy nie można polegać na artefaktach, którezostanie wyprodukowany według bieżącej kompilacji?

Edytować:

Opierając się na innym pomyśle (i odpowiedzi Piotra zniechęcającej do tej logiki Maven), ta wersja wygląda obiecująco, nie przemierzając Maven (uwaga: to działa!):

// ## 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)
}

Edytuj 2:

Opierając się na komentarzu Petera na temat nie sięgania do struktury projektu rodzeństwa i jego konkretnych sugestii, oto wynikowy fragment (uwaga: działa!):

// ## 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)
}

questionAnswers(2)

yourAnswerToTheQuestion