2015-12-08 15 views
9

Meine Frage bezieht sich auf das erste Faktor-12-Manifest für Apps: die Codebasis. (siehe http://12factor.net/codebase).Respektieren des Codebasis-Faktors (aus dem 12-Faktor-App-Manifest) für eine Gradle/Spring-App auf Cloudfoundry oder Heroku

TL; DR:

dieser Faktor besagt, gibt es eine Eins-zu Eins-Beziehung zwischen Codebases und entfaltet, so dass in diesem Fall, dass Sie nicht die gleiche Code-Basis (Repository) für beide Anwendungen verwenden soll

Meine Anforderung: Ich habe eine Website Spring-Anwendung und eine Batch-Spring-Anwendung teilen beide einen gemeinsamen Code dh das Domänenmodell (JPA-Entity-Klassen). Ich muss diesen gemeinsamen Code teilen können. Und beide Anwendungen müssen die gleiche Version des gemeinsamen Codes zu jeder Zeit verwenden.

Meine aktuelle Setup: Ich habe zur Zeit drei "Top-Level" Repositories auf GitHub:

  • Domain-Modell (JPA Entitätsklassen) Repo
  • Webseite Anwendung Repo
    • Domain-Modell Verzeichnis/Gradle Projekt (im Lieferumfang enthalten git subtree pull/push)
  • Batch Anwendung Repo
    • Domain Modell Verzeichnis/gradle Projekt (im Lieferumfang git subtree pull/push)

auch Bitte beachten Sie, dass der Domain-Modell Repo getrennt lebt (wie oben erwähnt), aber auch verschachtelt sowohl in der Website als auch in den Batch-Anwendung Repos. Ich benutze eine git subtree pull/push, um dieses Domain-Modell Repo als ein Verzeichnis und ein Gradle-Projekt innerhalb der anderen zwei Repos einzuschließen. Der Grund dafür ist, dass Heroku den Code selbst aus den Repos erstellt.

All dies ist sehr mühsam und fehleranfällig.

Kann jemand bitte eine bessere Lösung empfehlen?

+0

Ich verstehe Ihre Frage nicht wirklich. Kannst du es durchbrechen und klarer sein? – polka

Antwort

2

Ich würde den gemeinsamen Code zu einem privaten Maven Repo auf Bintray veröffentlichen und dann diesen privaten Repo zu den anderen Consumer-Apps hinzufügen und das gemeinsame Modul als Abhängigkeit angeben. Dies garantiert nicht, dass beide von der gleichen Version abhängen, aber leicht durch externe Prozesse mit Tools wie the Maven Versions Plugin verwaltet werden können. Vielleicht möchten Sie aber auch ein flexibleres Serialisierungssystem hinzufügen, um die Domänenmodelle der beiden Apps lose zu koppeln.

-1

Ich würde die Domain-Modelle in einem Paket bündeln (nicht sicher, was Java/Graples sprechen für solche Bündel ist, in Ruby wäre es ein Juwel) und installieren es auf die Produktion als Abhängigkeit. Sonst wäre auch eine git submodule

+0

Hallo. Kannst du mir bitte erklären, wie das mit dem 12-Faktor-Anwendungsmanifest übereinstimmt?Bitte geben Sie auch an, wie die Anforderung in Fettdruck erfüllt ist, d. H. Beide Anwendungen müssen jeweils die gleiche Version des gemeinsamen Codes verwenden. – balteo

+0

Eine gebündelte Abhängigkeit wird nicht Teil der App-Codebasis sein. Updates für die allgemeinen Bibliotheken werden von Abhängigkeitsupdates anstelle von App-Codebase-Updates verwaltet. Soweit ich weiß, ist dies einer der Hauptgründe dafür, dass Abhängigkeiten erstellt wurden, obwohl sie normalerweise zum Importieren und Verwenden von 3rd-Party-Code verwendet werden. – Achilles