2010-08-19 8 views
9

Zunächst habe ich irgendeine Art von Verständnis, dass die folgenden möglicherweise nicht die allgemein akzeptierte Möglichkeit, Dinge zu tun.Aktualisieren Sie eine Maven-Projektversion von Skript

Wir haben ein Maven 2-Projekt, das eine Versionsnummer hat, die etwa jede Woche während einer neuen Version aktualisiert werden sollte. Während dieses Prozesses habe ich versucht, all die Dinge zu eliminieren, an die man sich erinnern muss, und ich habe ein Bash-Skript erstellt, das den Prozess interaktiv behandelt.

Mein Problem besteht jedoch darin, die Pom-Version über die Befehlszeile zu aktualisieren. Ich kann das mit Sed machen, aber ich denke nicht, dass es sehr praktisch ist. Ich frage mich, ob es irgendein Maven-Plugin gibt, das in der Lage wäre, die pom.xml direkt von der Befehlszeile aus zu ändern. Die Version wird im Eigenschaftenbereich des Pom festgelegt. Wäre es möglich, ein Plugin zu schreiben, das die Eigenschaften ändern würde?

Vielen Dank im Voraus.

aktualisieren

Es scheint, dass mein Problem mit Projektversionen war als Eigenschaften definiert (die angewendet wurden, als Filterung), die jetzt ein bisschen dumm scheint.

Eine Sache, die ich noch auf der Suche nach einer Antwort bin, ist, wie man die Version eines bestimmten Projekts zuverlässig an die Befehlszeile bekommt. Zuvor hatte ich eine "ziemlich einzigartige" Eigenschaft, die ich mit grep, aber jetzt das <version> Element ist nicht einzigartig, da in Kind-Projekt gibt es mindestens zwei von diesen. Ich würde eine Art von XML-Parser benötigen, wenn Maven keine Lösungen hat, aber mein Ziel ist es, das Skript so unabhängig wie möglich zu machen.

Ich bin nicht sicher, ob ich eine neue Frage daraus hätte erstellen sollen, aber ich tat es nicht. Das Abrufen der Version hängt sehr eng mit dem Festlegen der Version zusammen.

Antwort

13

Ich frage mich, ob es irgendein Maven-Plugin gibt, das die pom.xml direkt von der Kommandozeile aus modifizieren könnte.

Die Versions Maven Plugin kann dies tun. Überprüfen Sie das folgende Ziel:

  • versions:set können die Projektversion von der Kommandozeile gesetzt werden, die Details untergeordneten Module nach Bedarf zu aktualisieren.
+0

Danke! Ich habe das Plugin selbst gefunden, aber irgendwie habe ich übersehen, dass das Plugin die pom.xml aktualisieren kann und nicht nur Abhängigkeiten und ähnliches anzeigt. Das Einstellen der Version funktioniert nicht, da die Version im Eltern-Pom als eine Eigenschaft definiert ist, die ich nicht erwähnen wollte. Allerdings habe ich festgestellt, dass es ein Ziel "update-properties" gibt, das den Trick machen könnte. – mkko

+0

Scheinbar "update-properties" dient nur dazu, Abhängigkeiten zu aktualisieren und keine Werte zu setzen. "versions: set" ist die nächste Übereinstimmung, aber es scheint, dass es keine Möglichkeit gibt, die Version im Eltern-Pom auf diese Weise zu definieren - oder zumindest als Eigenschaft. – mkko

+0

@mkko: 1. Sie müssen ** wirklich ** hart die Version in der Eltern POM und in den '' Elemente der untergeordneten Module, siehe [MNG-624] (http://jira.codehaus.org/browse) (MNG-624) für ausführliche Diskussionen zu diesem Thema 2. Abhängigkeiten sollten die eingebaute Eigenschaft '$ {project.version}' verwenden, es gibt keinen gültigen Grund, eine Eigenschaft für die Version zu verwenden. So funktioniert es mit Maven. 3. Und dann können Sie 'versions: set' verwenden (dies ist jedoch eine indirekte Folge, um die Dinge richtig zu machen). –

1

Von Maven POM reference:

env.X: "env" Voranstellen eine Variable mit gibt die Umgebungsvariable der Shell zurück. Zum Beispiel enthält $ {env.PATH} die Umgebungsvariable PATH . Hinweis: Während Umgebungsvariablen selbst sind, die unter Windows die Groß- und Kleinschreibung nicht berücksichtigen, wird bei der Suche nach Eigenschaften von zwischen Groß- und Kleinschreibung unterschieden. In anderen Worten, während die Windows-Shell den gleichen Wert für% PATH% und% Path% zurückgibt, Maven unterscheidet zwischen $ {env.PATH} und $ {env.Path}. Ab Maven 2.1.0, sind die Namen der Umgebung Variablen auf alle Großbuchstaben für Zuverlässigkeit normalisiert.

Das bedeutet, dass Sie eine Umgebungsvariable wie $ MYMAVENPROJECTVERSION haben kann und als diese Zeilen lesen:

<version>${env.MYMAVENPROJECTVERSION}</version> 

Sie diese Umgebungsvariable jede Woche aktualisieren, bevor Build ausgeführt wird.

Hoffe, das wird Ihnen helfen.

+2

Dies funktioniert nicht mit Multi-Modul-Builds (Sie müssen die Version im '' Element ** fest codieren). –

+0

Was bedeutet das? Sie können Platzhalter nicht im übergeordneten Bereich verwenden? es ist ein Fehler? – sourcerebels

+1

Genau, Sie können keine Platzhalter im übergeordneten Bereich verwenden. Es ist von Entwurf. Version weniger Elternelement wird in Maven 3.1 erlaubt. Siehe http://jira.codehaus.org/browse/MNG-624 und alle damit verbundenen Themen für interessante Diskussionen zu diesem Thema. –

Verwandte Themen