2016-11-02 8 views
0

Ich habe ein Multi-Modul gradle Projekt erzeugt, die so etwas wie die folgendendavon abhängen, dynamisch gradle Projekt

books 
    books-api 
    books-server 
    books-tests 
    books-client // generated using 'gradle swagger' 

Die books-api enthält service.swagger.json-Datei, die ich eine Java verwenden möchte aussieht generieren basierend auf Swagger Codegen Gradle Plugin. Das books-test-Modul ist eine Testsuite, die den generierten Client verwendet, um Tests für den Server auszuführen.

Das Swagger Codegen Gradle Plugin erstellt ein ganzes Gradle Modul books-client. Derzeit wird das Modul generiert, indem die Task swagger im Stammprojekt ausgeführt wird. Ich muss diesen Schritt manuell ausführen, bevor Sie eine gradle build für das Stammprojekt ausführen, sodass die books-test-Modulabhängigkeit von books-client erfüllt ist.

Gibt es trotzdem zu generieren books-client und haben books-test davon abhängen, nur gradle build auf dem Root-Projekt laufen? I.e. gradle build würde books-client generieren und books-test erfolgreich erstellen.

Antwort

0

Warum erstellen Sie das gesamte Modul gradle dynamisch? Oder meinst du, du erstellst einfach die Quelle des Moduls dynamisch?

Ich würde vorschlagen, dass Sie nicht das Modul grddle dynamisch erstellen, aber es dort mit allen notwendigen Abhängigkeiten haben und lassen Sie einfach das Swagger-Plugin den Code generieren. Soweit ich im Plugin sehe, kommt die swagger-Aufgabe trotzdem vor compileJava.

Also mein vorgeschlagener Workflow wäre, dass Sie das Gradle-Modul dort haben und dann den Standard-Gradle-Build-Workflow verwenden. Oder stößt man bei diesem Ansatz auf Probleme?

+0

Das Ändern der API sollte einen neuen Client erstellen. Wir möchten nicht, dass der Clientcode veraltet wird, da ein manueller Schritt erforderlich ist. Alles sollte einfach funktionieren, wenn jemand das Repo auscheckt und es erstellt. – mchlstckl

+0

Ich habe das (und es macht natürlich Sinn). Was ich nicht verstehe, ist, warum Sie das gesamte Modul erstellen müssen und nicht nur den Client, der generiert werden muss. Oder machst du das schon, und ich habe deine Frage missverstanden? Weil ich ein ähnliches Projekt habe, aber ich erstelle den API-Code aus einer Swagger-Spezifikation, und dies funktioniert ohne Probleme im Build-Prozess. –

+0

Es scheint nicht ganz einwandfrei für mich zu funktionieren. Wenn ich keine supportingFiles erzeuge, fehlen der generierten Quelle einige Java-Dateien. Wenn ich supportingFiles erzeuge, erzeugt es das gesamte gradle-Modul. Ich möchte keine Zeit damit verbringen, die generierte Quelle zu optimieren, daher scheint die Verwendung des generierten Gradle-Moduls die beste Option zu sein. – mchlstckl

Verwandte Themen