Gradle-Projekte in Abhängigkeit von Artefakten, die von Geschwisterprojekten erstellt wurden

Ich habe dieses Gradle-Setup mit vier Projekten, einem übergeordneten Projekt mit drei untergeordneten Projekten, in denen ein Java-Servlet-JSON-Backend in eine War-Datei und ein statisches HTML5-Frontend, das dies verbraucht, in eine Zip-Datei integriert sind. Beide "installieren" ihre Artifcats im lokalen Maven Repo.

Das dritte Geschwisterprojekt "Fusion" hängt von diesen beiden Artefakten ab, um einen "verschmolzenen" Krieg zu errichten, indem man sie einfach "zusammenzippt".

Sobald ich dies jedoch wie beabsichtigt zum Laufen gebracht hatte, musste ich es offensichtlich tunTesten Sie das Bootstrap-Szenario, indem Sie die Artefakte aus dem lokalen Repo löschen.

Jetzt bekomme ich plötzlich "Artifact 'no.company:frontend:1.0-SNAPSHOT@zip' not found".

Kann man sich nicht auf Artefakte verlassen, diewird produziert werden vom aktuellen Build?

Bearbeiten:

Basierend auf einer anderen Idee (und der Antwort von Peter, die diese Maven-Logik entmutigt), sieht diese Version vielversprechend aus und durchquert Maven nicht (Anmerkung: 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)
}

Bearbeiten 2:

Basierend auf Peters Kommentar, dass er nicht in die Projektstruktur der Geschwister eingreifen will, und seinen konkreten Vorschlägen, ist hier das Ergebnis (Anmerkung: 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)
}

Antworten auf die Frage(2)

Ihre Antwort auf die Frage