Ich versuche herauszufinden, wie viele (über 50) maven2-Projekte so organisiert werden können, dass sie in einem zentralen Nexus-Repository bereitgestellt werden können. Wenn Sie das mvn deploy
Ziel verwenden, müssen Sie das Ziel im DistributionManagement-Tag wie folgt angeben:
<distributionManagement>
<repository>
<id>nexus-site</id>
<url>http://central_nexus/server</url>
</repository>
</distributionManagement>
Jetzt möchte ich nicht, dass jede einzelne pom.xml (von diesen 50+) diesen Block immer und immer wieder enthält. Mein erstes wäre zwar die settings.xml
Datei, aber es scheint nicht möglich zu sein, sie dort zu definieren. Die erste Frage wäre also, warum das so ist. Wenn es möglich wäre, könnte ich es in der settings.xml in der maven2-Distribution angeben, die an alle Entwickler verteilt werden könnte.
Die einzig mögliche Lösung, die ich gefunden habe, bestand darin, ein organisationsweites Master-Pom-Projekt zu erstellen, das diese Einstellungen enthält, und alle anderen pom.xml über das <parent>
Tag von diesem Master-Pom abhängig zu machen . Bei Builds mit mehreren Modulen sieht dies jedoch seltsam aus:
- master configuration POM (pm)
- Project 1 parent pom (p1 with module 1 and module 2 as modules)
- Project 1 module pom (with pm as parent)
- Project 2 module pom (with pm as parent)
Normalerweise lese ich in der gesamten Dokumentation, dass die Modul-Poms den übergeordneten Pom verwenden sollten, nicht einen anderen. Aber nach dem Lesen der Maven-Website über Inheritance v. Aggregation steht geschrieben, dass dies tatsächlich möglich ist.
Ein Problem, das ich gefunden habe, war die Generierung der Maven-Site, die anscheinend Probleme mit diesem Setup hat (Module werden nicht richtig verknüpft, wenn sie keinen direkten Rückverweis haben).
Ist das also ein gültiger Ansatz? Gibt es eine andere, offensichtlichere und einfachere Lösung für das Problem?
Antworten:
Die beste Lösung hierfür besteht darin, ein einfaches übergeordnetes POM-Dateiprojekt (mit der Verpackung 'POM') generisch für alle Projekte Ihrer Organisation zu erstellen.
Dies kann erstellt, freigegeben und in Ihrem lokalen Nexus bereitgestellt werden, sodass jeder Zugriff auf sein Artefakt hat.
Fügen Sie nun für alle Projekte, die Sie verwenden möchten, einfach diesen Abschnitt hinzu:
Mit dieser Lösung können Sie allen Projekten Ihres Unternehmens auf einfache Weise weitere allgemeine Elemente hinzufügen. Wenn Sie beispielsweise Ihre JUnit-Nutzung auf eine bestimmte Version standardisieren möchten, ist dies der perfekte Ort dafür.
Wenn Sie Projekte haben, die Strukturen mit mehreren Modulen verwenden, die über ein eigenes übergeordnetes Element verfügen, unterstützt Maven auch die Verkettung der Vererbung, sodass es durchaus akzeptabel ist, die übergeordnete POM-Datei Ihres Projekts auf das übergeordnete POM Ihres Unternehmens zu verweisen und die untergeordneten Module des Projekts nicht einmal über Ihre zu informieren Muttergesellschaft des Unternehmens.
Ich sehe aus Ihrer Beispielprojektstruktur, dass Sie versuchen, Ihr übergeordnetes Projekt auf die gleiche Ebene wie Ihr Aggregator-POM zu bringen. Wenn Ihr Projekt ein eigenes übergeordnetes Element benötigt, besteht der beste Ansatz darin, das übergeordnete Element auf derselben Ebene wie die übrigen Module einzuschließen und Ihre Aggregator-Datei pom.xml im Stammverzeichnis der Verzeichnisse aller Module zu haben.
Mit dieser Struktur nehmen Sie Ihr übergeordnetes Modul in den Aggregator auf und erstellen alles mit einem
mvn install
aus dem Stammverzeichnis.Wir verwenden genau diese Lösung in meiner Organisation und sie hat sich bewährt und hat für uns recht gut funktioniert.
quelle
Es ist kein übergeordnetes POM erforderlich.
Sie können den DistributionManagement-Teil vollständig in Ihren Poms weglassen und entweder auf Ihrem Build-Server oder in settings.xml festlegen.
Um dies auf dem Build-Server zu tun, übergeben Sie einfach den
mvn
Befehl:Weitere Informationen zu den einstellbaren Optionen finden Sie unter https://maven.apache.org/plugins/maven-deploy-plugin/deploy-mojo.html .
Es ist auch möglich, dies in Ihrem zu setzen
settings.xml
.Erstellen Sie dort einfach ein Profil, das aktiviert ist und die Eigenschaft enthält.
Beispiel settings.xml:
Stellen Sie sicher, dass sich die Anmeldeinformationen für "Snapshots" und "Releases" im
<servers>
Abschnitt Ihrer settings.xml befindenDie Eigenschaften altSnapshotDeploymentRepository und altReleaseDeploymentRepository werden mit der Version 2.8 des Maven-Deployment-Plugins eingeführt. Ältere Versionen schlagen mit der Fehlermeldung fehl
Um dies zu beheben, können Sie eine neuere Version des Plug-Ins erzwingen:
quelle