Play Framework-Projektkomposition

9

Ich habe 2 Projekte, die mit PlayFramework 2.4 entwickelt wurden. Obwohl sie im Konzept völlig getrennt sind, teilen sie einige gemeinsame Merkmale, wie Evolutionsmanagement (Liquibase), CRUD-Verwaltungsmechanismus, Benachrichtigungs- (E-Mail-, SMS-) Mechanismus usw. Also wurde beschlossen, jedes Projekt in 2 Module aufzuteilen: allgemein " Core "Modul, das alle beschriebenen Logik enthält, und" Projekt "Modul, die projektspezifische Dienste, Vorlagen, Ansichten halten.

Der empfohlene Ansatz, um dies im Play Framework zu erreichen, ist das "Teilprojekt" -Konzept. Aber aus mindestens zwei Gründen ist das keine Option:

  1. Projekte werden von verschiedenen Teams entwickelt, deshalb können sie nicht in einer Verzeichnisstruktur lokalisiert werden
  2. Diese 3 Module ("Core" - und 2 "Projekt" -Module) MÜSSEN in separaten VCS-Repos (Mercurial) versioniert werden

Meine aktuelle Lösung besteht darin, ein Kernmodul zu erstellen und es als Abhängigkeit in der Play-Anwendung "Projekt" bereitzustellen. Auch wenn dieser Ansatz teilweise funktioniert, gibt es große Nachteile:

  1. Wenn Sie die routes-Datei im Modul hinzufügen, überschreiben sie die Datei mit den Projektrouten
  2. Sie können keine Ansichten im Kernmodul platzieren, da Sie aufgrund von Abb.1 nicht auf öffentliche Ressourcen zugreifen können
  3. Wegen der Nachteile n.1 und 2 können Sie Controller nicht im Kernmodul platzieren, da Sie keine Ansicht zum Rendern angeben können
  4. statische Assets (öffentliches Verzeichnis) sind nicht in der Modulverteilung enthalten

Ich bin gezwungen, gemeinsame Vorlagen in beide Projekte zu kopieren, ich kann praktisch keine gemeinsamen Controller schreiben, was so nervig ist

Schätze jede Hilfe. Vielleicht kann dies in einem hochgradig angepassten Build- und Veröffentlichungsprozess für das Kernmodul erreicht werden?

    
YoZH 28.06.2015, 18:52
quelle

1 Antwort

1

Ich denke, Sie sollten das Rollenkernprojekt nicht als Abhängigkeit für die anderen beiden Projekte hinzufügen. Sie könnten das Kernprojekt in Kernklassen und Kernressourcen aufteilen. Die Templates und Views im Playframework sind kompilierte Klassen, so dass man sie dann perfekt in ein jar packen kann. Die von Ihnen erstellten Vorlagen werden neben den Hauptklassen verpackt (oder Sie können sie auch trennen). Sie können diese Gläser in einer Abhängigkeitsanwendung wie Artefakt oder Nexus veröffentlichen und in die anderen Projekte importieren. Für die Ressourcen können Sie sie wie Webjars packen. So können Sie von jeder anderen Ansicht Ihrer anderen Projekte auf sie zugreifen.

    
Augusto 08.10.2015 13:11
quelle