Hi,
ich hab hier aktuell zwei (später mehr) Systeme mit je einer "Haupt-" POM (diese referenzieren dann via <modules> die ganzen Sub- und diese die Sub-Sub-Poms (aktuell ca 60).
Der Name "Haupt-" POM, weil aus Sicht *des Systems* dieses das "höchste" ist.
Nun habe ich halt mehrere Projekte, die mehrere solcher Systeme verwenden. Ein System, also eine "Haupt-" POM, möchte ich in mehreren Projekten verwenden. Jedes System und jedes Projekt muss für sich reproduzierbar sein.
Mein naive Ansatz war, einfach eine "Über-" POM anzulegen, die die beiden Haupt-POMs referenziert.
Beispiel:
Komponenten und Modulnamen sind zufällig systemübergreifend eindeutig, also es gibt nicht zweimal module2 oder so. Die "Haupt-" POMs (sys*/pom.xml) haben kein parent = ../build.pom.
In diesem Beispiel könnte es jetzt noch eine zweite "Über-" POM geben, die sys1 und sys3 verwendet.
Das funktioniert soweit auch erstmal.
Je Projekt habe ich unterschiedliche <distributionManagement>. Jetzt wäre es ganz toll, wenn ich das einfach in der höchsten POM definiere und es vererbt wird.
Leider funktioniert das nicht; ich muss in der "Über-" POM und in beiden "Haupt-" POMs <distributionManagement> setzen.
Scheinbar funktioniert Vererbung von Sub-POMs nur richtig, wenn man <parent> verwendet. <parent> macht natürlich die Ortogonalität kaputt, weil ein Modul sein übergeordnetes Projekt kennen muss (wie auch immer man auf sowas kommt, ist mir schleierhaft, wäre für eine kurze Erklärung dankbar).
Da meine eine "Haupt-" POM von zwei Projekten ("Über-" POMs) verwendet wird, kann ich <parent> natürlich da nicht reinschreiben.
Ich könnte natürlich Maven auch einfach zweimal aufrufen, dann muss ich statt dreimal nur noch zweimal <distributionManagement> setzen (die "Über-" POM und auch alle anderen POMs interessieren mich nicht, ich würde sie am liebsten gar nicht deployen lassen, aber das ist scheinbar in Maven hardcoded).
Kann ich das eleganter lösen?
~/1b
ich hab hier aktuell zwei (später mehr) Systeme mit je einer "Haupt-" POM (diese referenzieren dann via <modules> die ganzen Sub- und diese die Sub-Sub-Poms (aktuell ca 60).
Der Name "Haupt-" POM, weil aus Sicht *des Systems* dieses das "höchste" ist.
Nun habe ich halt mehrere Projekte, die mehrere solcher Systeme verwenden. Ein System, also eine "Haupt-" POM, möchte ich in mehreren Projekten verwenden. Jedes System und jedes Projekt muss für sich reproduzierbar sein.
Mein naive Ansatz war, einfach eine "Über-" POM anzulegen, die die beiden Haupt-POMs referenziert.
Beispiel:
Code:
sys1/pom.xml # "Haupt-" POM system 1 mit modules = component1 und component2
sys1/component1/pom.xml # parent = sys1
sys1/component1/module1/pom.xml # parent = component1
sys1/component1/module2/pom.xml # parent = component1
sys1/component2/module1/pom.xml # parent = component2
sys1/component2/module2/pom.xml # parent = component2
sys2/pom.xml # "Haupt-" POM system 2 mit modules = component1 und component2
sys2/component1/pom.xml # parent = sys2
sys2/component1/module1/pom.xml # parent = component1
sys2/component1/module2/pom.xml # parent = component1
sys2/component2/module1/pom.xml # parent = component2
sys2/component2/module2/pom.xml # parent = component2
build/pom.xml # "Über-" POM mit modules = ../sys1 und ../sys2
Komponenten und Modulnamen sind zufällig systemübergreifend eindeutig, also es gibt nicht zweimal module2 oder so. Die "Haupt-" POMs (sys*/pom.xml) haben kein parent = ../build.pom.
In diesem Beispiel könnte es jetzt noch eine zweite "Über-" POM geben, die sys1 und sys3 verwendet.
Das funktioniert soweit auch erstmal.
Je Projekt habe ich unterschiedliche <distributionManagement>. Jetzt wäre es ganz toll, wenn ich das einfach in der höchsten POM definiere und es vererbt wird.
Leider funktioniert das nicht; ich muss in der "Über-" POM und in beiden "Haupt-" POMs <distributionManagement> setzen.
Scheinbar funktioniert Vererbung von Sub-POMs nur richtig, wenn man <parent> verwendet. <parent> macht natürlich die Ortogonalität kaputt, weil ein Modul sein übergeordnetes Projekt kennen muss (wie auch immer man auf sowas kommt, ist mir schleierhaft, wäre für eine kurze Erklärung dankbar).
Da meine eine "Haupt-" POM von zwei Projekten ("Über-" POMs) verwendet wird, kann ich <parent> natürlich da nicht reinschreiben.
Ich könnte natürlich Maven auch einfach zweimal aufrufen, dann muss ich statt dreimal nur noch zweimal <distributionManagement> setzen (die "Über-" POM und auch alle anderen POMs interessieren mich nicht, ich würde sie am liebsten gar nicht deployen lassen, aber das ist scheinbar in Maven hardcoded).
Kann ich das eleganter lösen?
~/1b