Es scheint verschiedene Möglichkeiten zu geben, Eltern-Poms in einem Multiprojekt-Build zu strukturieren, und ich frage mich, ob jemand darüber nachgedacht hat, welche Vor- und Nachteile die einzelnen Aspekte haben.
Die einfachste Methode, einen Eltern-Pom zu haben, besteht darin, ihn in die Wurzel eines Projekts zu legen, d. H.
myproject/
myproject-core/
myproject-api/
myproject-app/
pom.xml
Dabei ist die Datei pom.xml sowohl das übergeordnete Projekt als auch die Module -core -api und -app
Die nächste Methode besteht darin, das übergeordnete Element wie in in ein eigenes Unterverzeichnis zu unterteilen
myproject/
mypoject-parent/
pom.xml
myproject-core/
myproject-api/
myproject-app/
Wo der übergeordnete POM noch die Module enthält, diese aber relativ sind, z. B. ../myproject-core
Schließlich gibt es die Option, bei der die Moduldefinition und das übergeordnete Element wie in getrennt sind
myproject/
mypoject-parent/
pom.xml
myproject-core/
myproject-api/
myproject-app/
pom.xml
Wobei das übergeordnete pom eine "gemeinsam genutzte" Konfiguration enthält (dependencyManagement, Eigenschaften usw.) und myproject / pom.xml die Liste der Module enthält.
Die Absicht ist, auf einen großen Build skalierbar zu sein, sollte also auf eine große Anzahl von Projekten und Artefakten skalierbar sein.
Ein paar Bonusfragen:
- Wo ist der beste Ort, um die verschiedenen gemeinsam genutzten Konfigurationen wie Quellcodeverwaltung, Bereitstellungsverzeichnisse, allgemeine Plugins usw. zu definieren? eine gemeinsame).
- Wie gehen das Maven-Release-Plugin, Hudson und Nexus damit um, wie Sie Ihre Multiprojekte einrichten (möglicherweise eine große Frage, es ist mehr, wenn jemand herausgeholt wurde, wann ein Multiprojekt-Build eingerichtet wurde)?
Bearbeiten: Jedes der Unterprojekte hat seine eigene pom.xml, ich habe es weggelassen, um es knapp zu halten.