Es gibt ein großes Problem bei der Definition dieser Konzepte in der Maven-Community. Sie haben Recht mit der Aussage, dass ein Eltern-Pom ist Vererbung und Modul-POM ist Zusammensetzung. Aber leider hat die Trennung dieser beiden Konzepte keine Geschichte in Maven. Die Maven-Dokumentation sagt klar, dass es besser ist, sie zu trennen. Dies würde zu dieser idealen Struktur führen
app-api/
app-impl/
app-war/
app-parent/
pom.xml
Wo pom.xml ist das Modul pom.
Aber fast jedes Projekt, das Sie im Open-Source-Sektor sehen werden, unterscheidet nicht zwischen ihnen.
Dies hat einen Grund: Viele Plugins unterscheiden zwischen ihnen auch nicht. Und selbst Maven selbst nimmt eine andere Einstellung an: Wenn <relativePath>
nicht gesetzt ist, nimmt Maven an, dass der Elternteil sich bei ..
befindet. Jedes Projekt muss also auf <relativePath>../app-parent</relativePath>
als Eltern verweisen.
Das beliebteste Plugin, das große Probleme mit der erwähnten Struktur hat, ist das Maven-Release-Plugin! Sie werden seltsame Probleme haben, wenn Sie der Annahme nicht folgen, dass der Modul-Pom der Eltern-Pom ist.
Der schlimmste Fehler ist, dass das release-plugin die Version-Eigenschaften in Ihrem Eltern nicht ersetzen kann und aufgrund von SNAPSHOT-Abhängigkeiten fehlschlägt. Ihr Elternteil wird vielleicht so etwas enthalten.
Normalerweise beim Freigeben dieser Eigenschaften würde automatisch auf ihre Release-Versionen 1.1 und 1.2 gesetzt werden. Das release-plugin (getestet bis Version 2.2.2) scheitert jedoch mit der Meldung, dass das Modul nicht mit Snapshot-Abhängigkeiten freigegeben werden kann.
Wenn Sie nur einige Modul-Poms "überspringen", ist dies möglicherweise kein Problem, wenn Sie <relativePath>
korrekt definieren. Aber Sie müssen versuchen, einige Fehler in Maven Plugins zu erwarten. Neben diesen Bugs hast du völlig Recht, die Poms zu trennen und ich würde es versuchen, wenn du Zeit hast, eine Sandbox-Veröffentlichung zu machen.
Dies beantwortet nicht Ihre Frage, aber wenn Sie Aggregation von Vererbung getrennt haben (was ich auch dazu tendiere), warum erben Sie von Ihren Aggregator Poms? In den Poms, die aggregiert werden, geben Sie keinen Abschnitt an oder erben Sie von Ihrem echten Elternteil. Grundsätzlich sind _ "leere" Aggregationsmodule als Eltern ihrer Submodule definiert_ nicht zwingend erforderlich. tue es nicht, wenn es keinen Sinn macht –
Hilikus