HINWEIS:
Diese Antwort gilt nur für Maven 2! Die erwähnten LATEST
und RELEASE
Metaversionen wurden vor über 6 Jahren in Maven 3 "aus Gründen reproduzierbarer Builds" gelöscht . Bitte beziehen Sie sich auf diese Maven 3-kompatible Lösung .
Wenn Sie immer die neueste Version verwenden möchten, verfügt Maven über zwei Schlüsselwörter, die Sie als Alternative zu Versionsbereichen verwenden können. Sie sollten diese Optionen mit Vorsicht verwenden, da Sie nicht mehr die Kontrolle über die von Ihnen verwendeten Plugins / Abhängigkeiten haben.
Wenn Sie von einem Plugin oder einer Abhängigkeit abhängig sind, können Sie den Versionswert LATEST oder RELEASE verwenden. LATEST bezieht sich auf die neueste veröffentlichte Version oder Snapshot-Version eines bestimmten Artefakts, das zuletzt in einem bestimmten Repository bereitgestellte Artefakt. RELEASE bezieht sich auf die letzte Nicht-Snapshot-Version im Repository. Im Allgemeinen ist es keine bewährte Methode, Software zu entwerfen, die von einer unspezifischen Version eines Artefakts abhängt. Wenn Sie Software entwickeln, möchten Sie möglicherweise RELEASE oder LATEST als Annehmlichkeit verwenden, damit Sie die Versionsnummern nicht aktualisieren müssen, wenn eine neue Version einer Bibliothek eines Drittanbieters veröffentlicht wird. Wenn Sie Software veröffentlichen, sollten Sie immer sicherstellen, dass Ihr Projekt von bestimmten Versionen abhängt, um die Wahrscheinlichkeit zu verringern, dass Ihr Build oder Ihr Projekt von einer Softwareversion betroffen ist, die nicht unter Ihrer Kontrolle steht.
Siehe die POM Syntax Abschnitt des Maven Buch für weitere Details. Oder lesen Sie dieses Dokument über Abhängigkeitsversionsbereiche , in denen:
- Eine eckige Klammer (
[
& ]
) bedeutet "geschlossen" (einschließlich).
- Eine Klammer (
(
& )
) bedeutet "offen" (exklusiv).
Hier ist ein Beispiel, das die verschiedenen Optionen veranschaulicht. Im Maven-Repository enthält com.foo:my-foo die folgenden Metadaten:
<?xml version="1.0" encoding="UTF-8"?><metadata>
<groupId>com.foo</groupId>
<artifactId>my-foo</artifactId>
<version>2.0.0</version>
<versioning>
<release>1.1.1</release>
<versions>
<version>1.0</version>
<version>1.0.1</version>
<version>1.1</version>
<version>1.1.1</version>
<version>2.0.0</version>
</versions>
<lastUpdated>20090722140000</lastUpdated>
</versioning>
</metadata>
Wenn eine Abhängigkeit von diesem Artefakt erforderlich ist, haben Sie folgende Möglichkeiten (andere Versionsbereiche können natürlich angegeben werden, wobei nur die relevanten hier angezeigt werden):
Deklarieren Sie eine genaue Version (wird immer auf 1.0.1 aufgelöst):
<version>[1.0.1]</version>
Deklarieren Sie eine explizite Version (wird immer auf 1.0.1 aufgelöst, es sei denn, es kommt zu einer Kollision, wenn Maven eine passende Version auswählt):
<version>1.0.1</version>
Deklarieren Sie einen Versionsbereich für alle 1.x (wird derzeit in 1.1.1 aufgelöst):
<version>[1.0.0,2.0.0)</version>
Deklarieren Sie einen offenen Versionsbereich (wird auf 2.0.0 aufgelöst):
<version>[1.0.0,)</version>
Deklarieren Sie die Version als NEUESTE (wird auf 2.0.0 aufgelöst) (aus maven 3.x entfernt)
<version>LATEST</version>
Deklarieren Sie die Version als RELEASE (wird in 1.1.1 aufgelöst) (aus maven 3.x entfernt):
<version>RELEASE</version>
Beachten Sie, dass Ihre eigenen Bereitstellungen standardmäßig den "neuesten" Eintrag in den Maven-Metadaten aktualisieren. Um den "Release" -Eintrag zu aktualisieren, müssen Sie jedoch das "Release-Profil" aus dem Maven-Super-POM aktivieren . Sie können dies entweder mit "-Prelease-Profil" oder "-DperformRelease = true" tun.
Hervorzuheben ist, dass jeder Ansatz, mit dem Maven die Abhängigkeitsversionen (LATEST, RELEASE und Versionsbereiche) auswählen kann, Sie für Zeitprobleme offen lässt, da spätere Versionen ein anderes Verhalten aufweisen können (z. B. hat das Abhängigkeits-Plugin zuvor einen Standard geändert Wert von wahr nach falsch, mit verwirrenden Ergebnissen).
Es ist daher im Allgemeinen eine gute Idee, genaue Versionen in Releases zu definieren. Wie Tims Antwort zeigt, ist das Maven-Versions-Plugin ein praktisches Tool zum Aktualisieren von Abhängigkeitsversionen, insbesondere der Versionen: Use-Recent-Versionen und Versionen: Use-Recent-Releases- Ziele.