Ich habe zwei Projekte: Übergeordnetes Projekt: A, Unterprojekt: B.
A / pom.xml:
<groupId>com.dummy.bla</groupId>
<artifactId>parent</artifactId>
<version>0.1-SNAPSHOT</version>
<packaging>pom</packaging>
Und in B / pom.xml habe ich:
<parent>
<groupId>com.dummy.bla</groupId>
<artifactId>parent</artifactId>
<version>0.1-SNAPSHOT</version>
</parent>
<groupId>com.dummy.bla.sub</groupId>
<artifactId>kid</artifactId>
Ich will B die Version von den Eltern erben, so dass der einzige Ort in meinem Fall habe ich setzen müssen 0.1-SNAPSHOT
ist A/pom.xml
. Aber wenn ich das entfernen <version>0.1-SNAPSHOT</version>
von B/pom.xml
unter dem Abschnitt Elternteil, klagt Maven über die fehlende Version für die Eltern.
Gibt es eine Möglichkeit, die ich nur verwenden kann, ${project.version}
oder so etwas, um zu vermeiden, dass ich 01.-SNAPSHOT
beide Poms habe?
inheritance
maven
Shengjie
quelle
quelle
Antworten:
EDIT: Seit Maven 3.5.0 gibt es dafür eine schöne Lösung mit
${revision}
Platzhalter. Siehe FrVaBe Antwort für weitere Einzelheiten. Für frühere Maven-Versionen siehe meine ursprüngliche Antwort unten.Nein, gibt es nicht. Sie müssen immer die Version des Elternteils angeben. Glücklicherweise wird es als Modulversion vererbt, was in den meisten Fällen wünschenswert ist. Darüber hinaus wird die Versionsdeklaration dieses übergeordneten Elements automatisch vom Maven Release Plugin angehoben. Daher ist es kein Problem, dass Sie die Version an zwei Stellen haben, solange Sie das Maven Release Plugin zum Freigeben oder nur zum Beheben von Versionen verwenden.
Beachten Sie, dass es einige Fälle gibt, in denen dieses Verhalten tatsächlich in Ordnung ist und mehr Flexibilität bietet, die Sie möglicherweise benötigen. Manchmal möchten Sie einige Versionen der vorherigen Eltern zum Erben verwenden, dies ist jedoch kein Mainstream-Fall.
quelle
${revision}
Platzhalter dafür verwenden. Siehe meine Antwort ;-)Maven ist nicht dafür ausgelegt, auf diese Weise zu funktionieren, aber es gibt eine Problemumgehung, um dieses Ziel zu erreichen (möglicherweise müssen Sie es mit Nebenwirkungen versuchen). Der Trick besteht darin, das untergeordnete Projekt anzuweisen, sein übergeordnetes Projekt über seinen relativen Pfad zu finden untergeordnete anzuweisen, Element und nicht über seine reinen Maven-Koordinaten zu finden, und zusätzlich die Versionsnummer in einer Eigenschaft zu externalisieren:
Eltern pom
Kind pom
Ich habe diesen Trick für eine Weile für eines meiner Projekte verwendet, ohne ein spezifisches Problem, außer der Tatsache, dass Maven zu Beginn des Builds viele Warnungen protokolliert, was nicht sehr elegant ist.
BEARBEITEN
Scheint, dass Maven 3.0.4 eine solche Konfiguration nicht mehr zulässt.
quelle
'version' contains an expression but should be a constant.
Der einfachste Weg, um Versionen IMO zu aktualisieren:
(Tun Sie das in Ihrem Root / Parent Pom Ordner).
Ihre POMs werden analysiert und Sie werden gefragt, welche Version Sie einstellen möchten.
quelle
mvn versions:update-child-modules
Andernfalls werden alle untergeordneten Modul-POM-Versionen übersprungen.Seit Maven 3.5.0 können Sie dafür den
${revision}
Platzhalter verwenden. Die Verwendung ist hier dokumentiert: Maven CI Friendly Versions .Kurz gesagt, der übergeordnete Pom sieht folgendermaßen aus (zitiert aus der Apache-Dokumentation):
und das Kind pom so
Sie auch müssen die Verwendung Flatten Maven Plugin pom Dokumente mit der dedizierten Versionsnummer für die Bereitstellung einbezogen zu erzeugen. Das HowTo ist in der verknüpften Dokumentation dokumentiert.
Auch @khmarbaise hat einen schönen Blob-Beitrag über diese Funktion geschrieben: Maven: POM-Dateien ohne Version?
quelle
${revision}
im POM (im Maven-Repository) befindet, als Abhängigkeit in einem anderen Projekt aufzulösen. Ich denke nicht, dass dies funktionieren wird.${revision}
im Versions-Tag durch die neue VersionWie Yanflea erwähnte, gibt es einen Weg, dies zu umgehen.
In Maven 3.5.0 können Sie die Version auf folgende Weise aus dem übergeordneten Projekt übertragen:
Übergeordnete POM.xml
Modul POM.xml
Es steht Ihnen frei, zu dem zu wechseln
myversion
, was Sie möchten, das keine reservierte Eigenschaft ist.quelle
Sie könnten auch verwenden:
um die Versionsnummern in Ihren POMs zu aktualisieren.
quelle
Die Antwort von eFox funktionierte für ein einzelnes Projekt, aber nicht, wenn ich auf ein Modul von einem anderen verwies (die Datei pom.xml wurde weiterhin in meiner
.m2
mit der Eigenschaft anstelle der Version gespeichert ).Es funktioniert jedoch, wenn Sie es mit dem kombinieren
flatten-maven-plugin
, da es die Poms mit der richtigen Version generiert, nicht mit der Eigenschaft.Die einzige Option, die ich in der Plug-In-Definition geändert habe, ist die
outputDirectory
, sie ist standardmäßig leer, aber ich bevorzuge sietarget
, die in meiner.gitignore
Konfiguration festgelegt ist:Die Plug-In-Konfiguration befindet sich in der übergeordneten Datei pom.xml
quelle
Verwenden Sie
mvn -N versions:update-child-modules
diese Option, um die Version des untergeordneten Poms zu aktualisierenhttps://www.mojohaus.org/versions-maven-plugin/examples/update-child-modules.html
quelle
Sie meinen, Sie möchten die Version aus dem übergeordneten Block von Bs POM entfernen. Ich denke, Sie können dies nicht tun. Die Gruppen-ID, die Artefakt-ID und die Version haben die POM-Koordinaten der Eltern angegeben. Was Sie weglassen können, ist die untergeordnete Version.
quelle