2008-10-29 18 views
44

Ich möchte ein Snapshot Projekt 'foo-1.0-SNAPSHOT' mit dem Maven Release Plugin veröffentlichen. Das Projekt hängt von einem 3rd-Party-Modul 'bar-1.0-SNAPSHOT' ab, das noch nicht veröffentlicht wurde. Ich benutze die Option 'allowTimestampedSnapshots' in der pom.xml meines Projekts, um zeitgestempelte Snapshots zu erlauben, aber ich nehme an, dass das 3rd Party Modul (Balken) nicht mit Zeitstempel versehen ist, es sei denn, maven klagt immer noch über ungelöste SNAPSHOT Abhängigkeiten.Wie man ein Projekt freigibt, das von einem 3rd Party SNAPSHOT Projekt in Maven abhängt

Gibt es eine Möglichkeit, das Projekt foo unabhängig von abhängigen SNAPSHOT-Projekten freizugeben, und wenn nicht, wie könnte ich dem Projekt eines Drittanbieters einen Zeitstempel hinzufügen?

Antwort

7

Die kurze Antwort ist die following answer .... die lange Antwort ist, dass Sie umgehen können.

Die einzige Möglichkeit, die ich in der Vergangenheit bewältigt habe, besteht darin, die 3rd-Party-Bibliothek effektiv aufzuteilen und selbst eine Veröffentlichung zu machen. Dies ist natürlich leichter gesagt als getan und es ist einfach schwierig, wenn die Bibliothek groß und komplex ist und unmöglich ist, wenn die Bibliothek der dritten Partei geschlossen ist. Eine einfachere Route könnte es sein, sich an die dritte Partei zu wenden und sie zu bitten, eine Freigabe zu machen.

Eine andere Möglichkeit könnte sein, ihre POM zu kopieren (stellen Sie sicher, dass es keine Snapshots hat), ändern Sie die Versionsinformationen und installieren Sie die POM und das Artefakt manuell in Ihrem Repository.

+5

Nicht genau richtig, siehe die anderen Antworten, können Sie Maven über '-DignoreSnapshots = true' erzählen, um auch mit Snapshot-Abhängigkeiten zu veröffentlichen. Dass du das vermeiden solltest und nur tust, wenn es absolut keine andere Wahl gibt, ist eine andere Geschichte. –

+0

Sonatype Beratung ist die Bereitstellung in einem lokalen Repository http://blog.sonatype.com/2009/01/best-practices-for-releasing-with-3rd-party-snapshot-dependencies/#.UstQinlq5t0 –

-2

Installieren Sie einfach das Glas mit einem eigenen Pom. Ich ändere generell die Gruppen- und Artefakt-ID, um klarzustellen, dass dies nicht die offizielle Version ist, aber das ist im Allgemeinen die beste Arbeit für Ihr Problem.

6

Die vorherige Antwort schlug vor, die Gruppen - und Artefakt - ID zu ändern ... tu dies nicht, da Maven es später nicht mehr als dasselbe Artefakt erkennt, wenn diese Abhängigkeit freigegeben wird und du zwei Kopien auf der Klassenpfad. Meine bevorzugte Methode ist, nur die Version zu ändern und ich werde etwas tun wie: [Originalversion] - [Mein Org-Name] - [Svn-Version zog ich es aus], so bekomme ich etwas wie 1.0-SONATYPE-3425. Mit der SVN rev kann ich die Quelle immer wieder ziehen und bei Bedarf patchen und genau wissen, was ich benutze, ohne die gesamte Quelle in meine eigene Svn zu ziehen.

Update - I blogged über diese eine Weile zurück.

138

Problem ist mit dem Parameternamen allowTimestampedSnapshots, es ist in der Dokumentation, aber die Quelle des Plugins verwendet einen anderen Parameternamen im Ausdruck - ignoreSnapshots.

Verwenden Sie einfach -DignoreSnapshots=true und das Ziel Vorbereitung des Release-Plugins ignoriert Snapshot-Abhängigkeiten.

+8

Dies funktioniert und ich glaube, dass es die richtige Antwort ist (die, nach der das OP sucht). Schade, dass es nicht genug Stimmen hat, um Nein zu sein. 1! Natürlich möchten Sie keine Artefakte mit Snapshot-Abhängigkeiten veröffentlichen, da Ihre Kunden diesen Snapshot ebenfalls finden müssen. Wenn Sie nur den Schnappschuss in Ihrer Testsuite (oder ähnlichem) verwenden, dann ist "-DignoreSnapshots = true" definitiv ein guter Workaround. – joelittlejohn

+1

Ich habe fast aufgegeben, bis ich darüber stolperte! Vielen Dank! –

12

Mit der Maven-Release-Plugin Option

-DignoreSnapshots=true 

statt

-DallowTimestampedSnapshots=true 

in meinem Fall geholfen, wird dies ermöglichen Abhängigkeiten mit Snapshot-Version zu verwenden, um vorzubereiten und Release durchzuführen.

Diese Option sollte sehr vorsichtig gehandhabt werden, da die Verwendung von Snapshot-Versionen in einer Version später Ihre Version unterbrechen kann, wenn die Snapshot-Abhängigkeit aktualisiert wird, was im Normalfall nicht Ihren Vorstellungen entspricht.