Ich kämpfe derzeit mit Maven: Ich habe ein komplexes Projekt aus mehreren verschachtelten Modulen und für einige dieser Module habe ich ähnliche Konfigurationen in den POMs.
Ich möchte es sauber machen. Eigentlich möchte ich eine "runnable-jar" allgemeine Konfiguration definieren und sie in einigen Modulen aktivieren.
Hier ist das POM-Fragment, das ich zwischen mehreren Projekten teilen möchte:
%Vor%In einigen POMS möchte ich etwas tun können wie:
%Vor%Ich habe nach einem Mittelwert gesucht, um einige XML-Fragmente in ein POM zu importieren oder um ein ganzes XML-Nodeset-Makro zu definieren.
Was ich gefunden habe, wäre die nächstliegende Lösung, ein Profil im übergeordneten POM zu definieren und es in einigen Untermodulen zu aktivieren, indem das Vorhandensein einer Datei getestet wird. Siehe diese verwandte Frage . Aber ich stehe vor dem Problem, dass die Eigenschaft {basedir}
nicht korrekt geerbt / gesetzt ist.
Ich finde es sehr überraschend, einen Hack zu brauchen, um so etwas Grundlegendes (= normal) zu tun. Wie gehst du normalerweise in Maven um?
Ich habe gerade etwas entdeckt, das mein Problem lösen könnte:
Ein Modul muss kein Untermodul seines übergeordneten Moduls sein.
Übergeordnete und Untermodul Beziehungen sind separate Konzepte.
Sie können ein übergeordnetes POM-Modul angeben, das nicht der tatsächliche übergeordnete Ordner in Ihrer Ordnerstruktur ist, indem Sie das relativePath -Attribut verwenden ( wie im Dokument erklärt )
In meinem Fall verwende ich das folgende Layout:
- Hauptprojekt
- utils (übergeordnetes Hauptprojekt )
- cli-programme (übergeordnet: Hauptprojekt )
- generic-cli (übergeordnet: cli-programme ; Dummy & amp; leeres POM-Modul)
- cli-1 (übergeordnet: generic-cli )
- cli-2 (übergeordnet: generic-cli )
Dann kann ich in generic-cli/pom.xml
eine Konfiguration angeben, die allen meinen cli-Programmen gemeinsam ist (wie benutzerdefinierte Testsuiten, Runnable-Jar-Pakete usw.).
Eine Möglichkeit wäre, Ihren <plugin>
-Code in <pluginManagement>
des übergeordneten POM Ihres Multi-Modul-Projekts zu deklarieren. Die einzelnen Module können dann einen <plugin>
-Abschnitt haben, der dies verwenden kann, ohne den Inhalt neu zu deklarieren.
Elternpom:
%Vor%Kinderpoms:
%Vor%keine vollständige Antwort, aber eine Lösung für das zugrundeliegende Problem besteht darin, ein gemeinsames Layout der Module zu verwenden, z. root / modules / moduleA root / modules / moduleB.
Sie können die Module nicht mehr in einem eigenen Verzeichnis erstellen, sondern nur durch ein übergeordnetes Projekt. Aber Sie können mit den Profilen arbeiten.
Maven-Kacheln lösen das. Es ist auch auf der Roadmap für Maven 3.x, aufgespürt hier .