2013-02-14 2 views
5

Mein Maven-Artefakt wird in einem Nexus-Snapshot-Repository bereitgestellt. Dort wird sie im richtigen Verzeichnis gespeichert, aber die Dateinamen haben die folgenden Muster:Maven: Warum fehlt das SNA-SAPSHOT-Suffix aus dem Namen der Artefaktdatei?

mylibrary-1.0-20130213.125827-2.jar 

jedoch Maven nicht, dass der Snapshot zum Download bereit. Nach dem Fehlerprotokoll, scheint Maven die folgenden Dateinamen zu erwarten:

mylibrary-1.0-SNAPSHOT.jar 

Dies sind die Repository-Einstellungen in meinem pom:

<repositories> 
    <repository> 
     <id>mycompany-all</id> 
     <url>https://servername/nexus/content/groups/mycompany/</url> 
    </repository> 
</repositories> 

<distributionManagement> 
    <repository> 
     <id>mycompany-releases</id> 
     <url>https://servername/nexus/content/repositories/releases/</url> 
    </repository> 
    <snapshotRepository> 
     <id>mycompany-snapshots</id> 
     <url>https://servername/nexus/content/repositories/snapshots/</url> 
    </snapshotRepository> 
</distributionManagement> 

Hinweis: Die NEXUS-Gruppe umfasst sowohl den releases und snapshots Repo .

Ich habe diese Repos in settings.xml nicht konfiguriert - ist das das Problem? Oder was mache ich sonst falsch?

+1

Sie sagen "* Maven scheint zu erwarten ... *". Erhalten Sie einen Fehler, wenn Sie meinen Ratschlägen folgen und 'mylibrary-1.0-20130213.125827-2.jar' als 'mylibrary-1.0-SNAPSHOT' bezeichnen? –

Antwort

5

Ich habe es durch Hinzufügen der Repositories der settings.xml wie diese Arbeit:

<repositories> 
    <repository> 
     <id>mycompany-releases</id> 
     <url>https://servername/nexus/content/repositories/releases/</url> 
     <releases><enabled>true</enabled></releases> 
     <snapshots><enabled>false</enabled></snapshots> 
    </repository> 
    <repository> 
     <id>mycompany-snapshots</id> 
     <url>https://servername/nexus/content/repositories/snapshots/</url> 
     <releases><enabled>false</enabled></releases> 
     <snapshots><enabled>true</enabled></snapshots> 
    </repository> 
</repositories> 

Dann wurden die SNAPSHOT JAR-Dateien ganz gut heruntergeladen. Ich vermute, dass, wenn Maven weiß, dass es sich um ein Snapshot Repo handelt, es sowohl mit als auch ohne uniqueVersion versucht (siehe Duncan Jones 'Antwort).

Beachten Sie, dass in unserem Fall diese Blöcke als pluginRepositories dupliziert werden müssen, weil wir benutzerdefinierte Maven-Plugins haben.

+1

Tatsächlich liest Maven die Datei maven-metadata.xml im Ordner /com/mycompany/mylibrary/1.0-SNAPSHOT. Dieser XML-Code teilt maven mit, welche Zeitstempel- und Buildnummer er verwenden soll. Maven dreht sich dann um und konstruiert die Anfrage für diese spezielle einzigartige Version. Wenn Maven die maven-metadata.xml nicht finden kann, wie es der Fall wäre, wenn Sie kein Snapshot-Repository hätten, würde es eine Hail-Mary-Anfrage für die -SNAPSHOT-Version machen, um zu sehen, ob sie da ist. –

13

Das von Ihnen gepostete Muster (mylibrary-1.0-20130213.125827-2.jar) ist eine eindeutige Snapshot-Version. Maven 3 zwingt Sie dazu, diese Art von Artefakt Namensgebung zu verwenden, aber in Maven 2 kann mit einer Aussage wie verhindert werden:

<distributionManagement> 
    ... 
    <snapshotRepository> 
    ... 
    <uniqueVersion>false</uniqueVersion> 
    </snapshotRepository> 
    ... 
</distributionManagement> 

Um einen bestimmten Snapshot in Ihrem Projekt zu verwenden, erklären ihn als:

<dependency> 
    <groupId>com.foo</groupId> 
    <artifactId>mylibrary</artifactId> 
    <version>1.0-20130213.125827-2</version> 
</dependency> 

um die neuesten bekannten Snapshot verwenden, erklären sie „im alten Stil“:

<dependency> 
    <groupId>com.foo</groupId> 
    <artifactId>mylibrary</artifactId> 
    <version>1.0-SNAPSHOT</version> 
</dependency> 

Sie können die Antwort auf diese similar question nützlich auch finden.

Verwandte Themen