2016-07-28 5 views
3

Ich habe zwei Projekte, die wiederverwendbaren Code für viele verschiedene Dienste und Web-Anwendungen, wie CommonService und CommonWeb enthalten.Pom-Struktur für allgemeine Dienste mit Spring Boot

Ich möchte, dass alle meine Service-Projekte so viel Pom-Konfiguration wie möglich aus dem allgemeinen Dienst wiederverwenden, aber ich möchte immer noch die Spring Boot Starter Poms in den gemeinsamen Projekten nutzen, um sie einzurichten. Was wäre der beste Weg, die Pom-Hierarchie zu organisieren?

CommonService und CommonWeb haben beide Code, Abhängigkeiten und Plugins wie der AspectJ Compiler. Würde mein AppService CommonService als Abhängigkeit oder als Eltern hinzufügen?

Antwort

2

Wir lösten es, indem wir gemeinsame Eltern hatten, die vom Elternteil Spring Boot übernommen wurden. Dieser gemeinsame Elternteil wäre für jedes der Projekte ein Elternteil. Dies war besonders praktisch für die Architektur von Microservices.

Wenn Sie verschiedene Arten von Projekten haben, z. HTTP vs. Messaging-Dienst, Sie können eine Vererbungshierarchie von POM-Eltern haben, wobei root immer Spring-Boot-Eltern ist.

Wenn Sie keine Idee haben, Vererbungshierarchie der Eltern POMs zu haben, empfehle ich, Spring Boot-Projekt zu analysieren, wie sie POMs organisieren. Es ist sehr clever, aber es kann zu viel werden, wenn Sie nicht viele verschiedene Arten von Diensten/Projekten haben.

Natürlich müssen diese POMs ordnungsgemäß versioniert und als eigenständige Artefakte in einem Artefakt-Repository bereitgestellt werden.

0

Da ein Maven Eltern POM in pom Verpackung sein muss.

Sie sollten ein CommonParent Maven Projekt neben Ihrem CommonService und CommonWeb Projekte wie dieses:

common (maven aggregate project) 
    +- common-service (module with `jar` packaging) 
    +- common-web  (module with `jar` packaging) 
    \- common-parent (module with `pom` packaging, 
        and dependent on common-service, common-web) 

Dann müssen Sie nur noch alle POM Ihre Projekte ein Kind Ihrer Common-Eltern sein.


Darüber hinaus sollten Sie Ihre eigenen AutoConfiguration Klassen schreiben und verwenden Sie die @ConfigurationProperites Verkapselung von Spring-Boot zur Verfügung gestellt Ihre eigenen anwendungstechnischen Eigenschaften zu konstruieren. Damit ein nachgelagertes Projekt Ihre allgemeine Konfiguration problemlos steuern kann, verwenden Sie dazu die Einstellungseigenschaft common.web.feature1.enabled = false.