Ich habe ein Maven-Projekt mit mehreren Modulen. Wir beabsichtigen, alle diese Module gemeinsam zu versionieren. Aber ab sofort lande ich in jeder der Module pom.xml wie unten fest codiert
<parent>
<artifactId>xyz-application</artifactId>
<groupId>com.xyz</groupId>
<version>2.50.0.g</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>com.xyz</groupId>
<artifactId>xyz-Library</artifactId>
<version>2.50.0.g</version>
und das übergeordnete Hauptmodul hat die folgende Konfiguration
<modelVersion>4.0.0</modelVersion>
<groupId>com.xyz</groupId>
<artifactId>xyz-application</artifactId>
<version>2.50.0.g</version>
<packaging>pom</packaging>
Antworten:
Verwendung
versions:set
aus dem Versions-Maven-Plugin :Es werden alle POM-Versionen, übergeordneten Versionen und Abhängigkeitsversionen in einem Projekt mit mehreren Modulen angepasst.
Wenn Sie einen Fehler gemacht haben, tun Sie dies
danach oder
wenn Sie mit den Ergebnissen zufrieden sind.
Hinweis: Bei dieser Lösung wird davon ausgegangen, dass alle Module das Aggregat-POM auch als übergeordnetes POM verwenden. Dieses Szenario wurde zum Zeitpunkt dieser Antwort als Standard angesehen. Wenn dies nicht der Fall ist, lesen Sie Garret Wilsons Antwort .
quelle
versions:set
kann man angeben-DgenerateBackupPoms=false
, dass dieses Plugin standardmäßig Original-POM-Dateien sichert.versions:commit
: "Entfernt die anfängliche Sicherung des POM und akzeptiert dadurch die Änderungen."Bei der angegebenen Antwort wird davon ausgegangen, dass das betreffende Projekt zusätzlich zur Modulaggregation die Projektvererbung verwendet. In der Tat sind das unterschiedliche Konzepte:
https://maven.apache.org/guides/introduction/introduction-to-the-pom.html#Project_Inheritance_vs_Project_Aggregation
Einige Projekte können eine Aggregation von Modulen sein, haben jedoch keine Eltern-Kind-Beziehung zwischen dem Aggregator-POM und den aggregierten Modulen. (Möglicherweise besteht überhaupt keine Eltern-Kind-Beziehung, oder die untergeordneten Module verwenden möglicherweise ein separates POM als "Eltern".) In diesen Situationen funktioniert die angegebene Antwort nicht.
Nach langem Lesen und Experimentieren stellt sich heraus, dass es eine Möglichkeit gibt, das Versions Maven Plugin zu verwenden nicht nur das Aggregator-POM, sondern auch alle aggregierten Module zu aktualisieren. es ist die
processAllModules
Option. Der folgende Befehl muss im Verzeichnis des Aggregatorprojekts ausgeführt werden:Das Versions Maven Plugin aktualisiert nicht nur die Versionen aller enthaltenen Module, sondern auch die Abhängigkeiten zwischen den Modulen !!!! Dies ist ein großer Gewinn, der viel Zeit spart und alle möglichen Probleme verhindert.
Vergessen Sie natürlich nicht, die Änderungen in allen Modulen festzuschreiben, was Sie auch mit demselben Switch tun können:
Sie können sich dafür entscheiden, auf das Backup-POMS ganz zu verzichten und alles in einem Befehl zu erledigen:
quelle
versions:set
Plugin angegeben werden muss, lautet-DoldVersion='*'
unter mojohaus.org/versions-maven-plugin/set-mojo.html ausdrücklich, dass diese Eigenschaft bei der Verarbeitung eines Aggregatorprojekts angegeben werden sollte.-DprocessAllModules
eigentlich? Es funktioniert nicht bei mir.Vielleicht möchten Sie sich das Ziel von Maven Release Plugin ansehen : Update-Versionen Ziel. Die übergeordnete Version sowie alle darunter liegenden Module werden aktualisiert.
Update: Bitte beachten Sie, dass es sich bei dem oben genannten um das Release-Plugin handelt. Wenn Sie nicht freigeben, möchten Sie möglicherweise verwenden
versions:set
quelle
mvn release:update-versions -DautoVersionSubmodules
hat gut funktioniert für mich, auch wenn ich nicht veröffentliche :-)Wenn Sie den Prozess vollständig automatisieren möchten (dh die Versionsnummer erhöhen möchten, ohne die aktuelle Versionsnummer kennen zu müssen), können Sie dies tun:
quelle
-DoldVersion='*'
Ich empfehle Ihnen, das Maven-Buch über Builds mit mehreren Modulen (Reaktoren) zu lesen .
Ich meinte insbesondere Folgendes:
sollte geändert werden in. Achten Sie hier auf die nicht definierte Version nur im übergeordneten Teil, in dem sie definiert ist.
Dies ist ein besserer Link .
quelle
pom.xml
Dateien, aber ich stimme (mit @ ThorbjørnRavnAndersen) zu, dass das Lesen eines ganzen Buches für diese Informationen übertrieben ist. : pversions:update-child-modules
klingt wie das, wonach Sie suchen. Sie können Versionen ausführen: wie erwähnt einstellen, dies ist jedoch eine einfache Möglichkeit, die übergeordneten Versionsnummern zu aktualisieren. Ich bin der Meinung, dass Sie für die untergeordneten Module die<version>
Definitionen entfernen sollten , da sie die Versionsnummer des übergeordneten Moduls erben.quelle
Der beste Weg ist, da Sie beabsichtigen, Ihre Module zu bündeln, können Sie das
<dependencyManagement>
Tag im äußerstenpom.xml
(übergeordneten Modul) direkt unter dem<project>
Tag angeben . Es steuert die Version und den Gruppennamen. In Ihrem individuellen Modul müssen Sie nur das<artifactId>
Tag in Ihrem Modul angebenpom.xml
. Es wird die Version aus der übergeordneten Datei übernommen.quelle
Am einfachsten ist es, die Version in jeder pom.xml in eine beliebige Version zu ändern. Überprüfen Sie dann das Abhängigkeitsmanagement, um die richtige Version des in diesem Modul verwendeten Moduls zu verwenden! Wenn Sie beispielsweise die Versionierung für ein Schleppmodulprojekt erhöhen möchten, müssen Sie Folgendes tun:
im Kindermodul:
und im übergeordneten Modul:
quelle
So aktualisieren Sie die Hauptversion von pom.xml und die übergeordnete Version auf Submodulen:
quelle