2009-06-12 13 views
4

zu verwenden Ich versuche, die Snapshot - Version einer 3rd - Party - Bibliothek in unserem lokalen Repo bereitzustellen (aus alten Gründen ist dies eine alte Version, die nicht mehr in einem Online - Repo gehostet wird) Zeit kann ich es nicht ersetzen, daher muss ich es lokal hosten).Maven versucht falsche Snapshot - Version

Nun, ich denke, ich habe das SNAPSHOT-Konzept missverstanden, also wäre ich sehr dankbar, wenn mir jemand klar machen könnte. Das jar, das ich habe, heißt foo-0.5.0-20090612.124.jar, und ich versuche, es mit maven deploy hochzuladen: deploy-Datei nach org.bar.foo unter Version 0.5.0. Die Versionsabhängigkeit in meinem POM ist 0.5.0-SNAPSHOT

Jedes Mal, wenn ich die JAR-Datei in unserem lokalen Repo die Zahl nach dem Datum im Dateinamen laden wird wiederholt (dh bis 125), aber wenn ich laufe Maven installieren , maven versucht, ein Glas mit der vorherigen Nummer (z. B. 124) herunterzuladen.

Also, gibt es eine Möglichkeit, Maven zu erhalten, um die richtige Snapshot-Version herunterzuladen, oder sollte ich kein Geschäft haben, SNAPSHOT-Dateien von Drittanbietern in unser Repo zu laden?

Antwort

4

Der Anwendungsfall, den Sie haben, ist in Ordnung. Ich glaube, die beste Vorgehensweise, die von den Maven-Leuten empfohlen wird, ist, dass sobald man eine SNAPSHOT-Version eines Jar in ein gemeinsames Repository hochlädt, man es nicht mehr als SNAPSHOT, sondern als Release behandeln sollte.

Dies macht Sinn, weil man die Leute wollen auf abhängen, dass bestimmte Version dieses Artefakt. Das Artefakt befindet sich nicht in aktiver Entwicklung und es ist nicht zu erwarten, dass es sich zu irgendeinem Zeitpunkt willkürlich ändert und aus diesem Grund sollte es als Freigabe betrachtet werden. Nur eine, der du deinen eigenen, persönlichen Namen gibst, und eine, die jemand anders für einen SNAPSHOT hält.

Wenn Sie nach der Abhängigkeit foo-0.5.0-SNAPSHOT fragen, glaube ich nicht, dass Maven nach foo-0.5.0- sucht. Ich glaube, dass es im Repository buchstäblich nach foo-0.5.0-SNAPSHOT sucht, und deshalb finden Sie es nicht. (Allerdings nicht 100% sicher, da wir unsere SNAPSHOTS nicht Timestamp. Wir überschreiben einfach -SNAPSHOT Gläser mit neueren Versionen, wie sie gemacht werden.)

Also, foo-0.5.0-20090612.124.jar in Ihr Drittanbieter-Repository (das aus dem oben genannten Grund nur Releases enthalten sollte). Dann referenziere das Artefakt "foo-0.5.0-20090612.124" in deinem POM explizit und alles sollte gut funktionieren.

+0

Ich werde sagen, dass Sie im Grunde genommen recht haben, ich habe wirklich keine Probleme, einen Snapshot von Drittanbietern zu meinem Repo hinzuzufügen. Die beste Lösung war die einfachste, um das SNAPSHOT-Tag zu entfernen. – mikek

0

Ich bin mir nicht sicher, ob ich folge, sollten Sie ein Artefakt namens myartifact.jar an eine POM mit einer Version von 0.5-SNAPSHOT angeschlossen haben.

Bei der Bereitstellung, Ihr Repository sollte die -SNAPSHOT in einem Zeitstempel ändern und die Repository-Metadaten aktualisieren, um widerzuspiegeln, dass dies die aktuelle Snapshot-Version ist, so dass es richtig ein SNAPSHOT Anfrage dienen kann. Verwenden Sie ein Repository wie Archiva oder Nexus oder nur einen FTP/HTTP-Server?

+0

Weder ein lokaler Dateiserver. Dieses Repo ist ausschließlich für den internen Gebrauch bestimmt. Das ist ziemlich genau das, was ich versuche, obwohl. Das Problem ist, dass wenn ich maven install starte, es nicht nach dem richtigen Zeitstempel sucht, sondern nach einem früheren. Gibt es irgendetwas, das dem 3rd-Party-Jar innewohnt, das seinen Zeitstempel bestimmt? – mikek