2010-04-06 6 views
11

Mein Maven Modul A hat eine Abhängigkeit von einem anderen Maven Modul B von anderen Leuten. Wenn ich "mvn install" zum ersten Mal unter A starte, lädt Maven B-1.0.jar von einem Remote-Repository in mein lokales Maven-Repository. Mein Modul A ist in Ordnung.Wie aktualisiert man das lokale Maven-Repository mit neueren Artefakten aus einem Remote-Repository?

In der Zwischenzeit stellen andere Leute neuere B-1.0.jar auf dem Remote-Repository bereit. Wenn ich "mvn install" erneut unter A starte, lädt maven das neuere B-1.0.jar nicht aus dem Remote-Repository in mein lokales Repository. Infolgedessen schlägt mein Build des Moduls A aufgrund von API-Änderungen in B-1.0.jar fehl.

Ich könnte manuell B-1.0.jar aus meinem lokalen Repository löschen. Dann würde maven das nächste B-1.0.jar aus dem Remote-Repository herunterladen, wenn ich das nächste Mal "mvn install" ausführe.

Meine Frage ist, wie kann ich Maven automatisch laden die neuesten Artefakte aus einem Remote-Repository. Ich habe versucht, updatePolicy auf "immer" zu setzen. Aber das hat nicht funktioniert.

Antwort

27

Maven veröffentlicht keine neuen Releases - 1.0 gilt als endgültig und neue Releases sollten eine neue Version verwenden.

Wenn sich das Modul B noch in der Entwicklung befindet, sollten Sie die Version 1.0-SNAPSHOT verwenden - Snapshots sind eine spezielle Maven-Version, die nach Updates sucht und mit dem Zeitstempel und der Build-Nummer für das Tracking gespeichert wird.

+1

Dies ist sehr hilfreich. SNAPSHOT ist nur für diesen Zweck. – Richard

+0

Danke Brett für die Antwort :) – pranay

2

Ich stimme Brett oben zu: neue Versionen sollten neue Versionen verwenden. Für Ihren Fall sind Schnappschüsse wahrscheinlich die beste Lösung, aber etwas anderes, das auch hilfreich sein könnte, ist die Verwendung von dependency version ranges.

Dadurch können Sie eine Version von
(1.0,)
angeben besagt, dass Sie eine beliebige Version von mehr als 1,0 annehmen.
oder
[1.1.1,1.1.7]
akzeptiert alles zwischen (einschließlich) Versionen 1.1.1 und 1.1.7.
Die Schreibweise folgt Standard-Mathematik-Intervall Syntax wo

[= Aufnahme in dem Intervall
(= Ausschluß aus dem Intervall

(in der Schule, ich dacht immer, die eckigen Klammern als „Betrieb“ dieses Elements in , während die weichere Klammer "lass es gehen")

Dies kann in Fällen hilfreich sein, in denen Ihre Abhängigkeiten immer noch häufig entwickelt werden und Sie nicht auf neue Snapshots verlassen möchten, die weniger stabil sind und eher brechen Sie können die Sicherheitsbereiche festlegen und die Grenzen nach oben oder unten anpassen geeignet, im Laufe der Zeit

Verwandte Themen