Maven 3.0 mit Artifactory 2.3.x

Posted byChristian Moser Posted on13. December 2010 Comments0

Bei der Umstellung von Maven 2.x auf Maven 3.0 stiess ich auf einige Probleme, die ich erst nach langen hin und her zwischen der Maven & Artifactory mailing list lösen konnte.

Das Problem zeigte sich, als Maven 3.0 nach einem update-snapshots mit -U, neuere im lokalen repository installierte Artifakte mit älteren aus dem artifactory überschrieben hat. Dieser Effekt trat mit Artifactory 2.2.3 und non-unique snapshot repositories auf.

Dieser Fehler hat mir für einige Zeit Kopfzerbrechen bereitet, doch schliesslich konnte eine Lösung mit dem Artifactory Support gefunden werden. Artifactory 2.3.x ist zwar mit Maven 3.x kompatibel, aber NUR wenn unique snapshot repositories verwendet werden. Unique bedeutet, dass die snapshots nicht einfach als z.B project-4.0.0-SNAPSHOT.jar im Artifactory abgelegt werden, sondern mit einem angehängten Zeitstempel zur eindeutigen Identifikation. Ein Löschen aller SNAPSHOT’s im repository und ein erneutes deployen aller SNAPSHOT-Artifakte brachte die Lösung.

Ein zweiter Blick in Maven 3.0 compatibility Notes schaffte Klarheit:

Non-unique Snapshot Deployments
The setting <uniqueVersion>false</uniqueVersion> for a distribution repository has no effect in version 3.x, snapshot artifacts will always be deployed using a timestamped version.

Maven deployt SNAPSHOT’s seit Version 3.x immer mit angehängten Zeitstempel.  Maven versucht anhand des Zeitstempel zu vergleichen welche Artifakte aktueller sind, ist kein Zeitstempel vorhanden, wie dies bei non-unique repositories der Fall ist, so führt dies zum beschriebenen Fehler.

Wie es aussieht haben die Entwickler von Sonatype (Nexus) dies der Konkurrenz von JFrog (Artifactory) “vergessen” zu sagen. 😈

Nun muss man wissen, dass Artifactory für Maven repositories die Einstellungen per default auf non-unique setzt und dies auch ausdrücklich im Artifactory guide empfohlen wurde. In der Zwischenzeit wurde die Passage jedoch angepasst und Artifactory 2.3.2 wird Maven snapshot repositories per default als unique verwalten:

Maven 3 Only Supports Unique Snapshots
Maven 3 has, unfortunately, dropped support for resolving and deploying non-unique snapshots. Therefore, if you have a snapshot repository that is using non-unique snapshot, it is recommended to change its Maven snapshot policy to ‘Unique’ and to remove any previously deployed snapshot from this repository.
The unique snapshot name generated by the Maven client on deployment cannot help in identifying the source control changes from which the snapshot was built and has no relation to the time sources were checked out. It is advised to have the artifact itself embed the revision/tag (as part of its name or internally) for clear and visible revision tracking. Artifactory allows you to tag artifacts with the revision number as part of its Build Integration support.
http://wiki.jfrog.org/confluence/display/RTF/Local+Repositories

So, ich hoffe ich konnte jemanden hiermit vor Problemen bewahren. 🙂

Meine erstellten Mailing-list Einträge zum Problem:

http://forums.jfrog.org/artifactory-amp-maven-3-0-metadata-problem-td5776632.html

http://maven.40175.n5.nabble.com/Maven-3-0-doesn-t-update-snapshot-artifacts-td3276893.html

Category