2013-02-14 20 views
5

Il mio artefatto maven è distribuito su un repository di istantanee Nexus. Lì, è memorizzato nella directory corretta, ma i suoi nomi di file hanno il seguente schema:Maven: Perché manca il suffisso -SNAPSHOT dal nome del file artefatto?

mylibrary-1.0-20130213.125827-2.jar 

Tuttavia, Maven non riesce a scaricare quel snapshot. Secondo il registro degli errori, Maven sembra aspettarsi il seguente nome di file:

mylibrary-1.0-SNAPSHOT.jar 

Queste sono le impostazioni del repository nel mio 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> 

Nota: il gruppo Nexus comprende sia il repo releases e snapshots .

Non ho configurato questi repository in settings.xml - è questo il problema? O che altro sto sbagliando?

+1

Si dice "* Maven sembra aspettarsi ... *". Ricevete un errore quando seguite il mio consiglio e consultate 'mylibrary-1.0-20130213.125827-2.jar' come' mylibrary-1.0-SNAPSHOT'? –

risposta

5

Ho fatto funzionare con l'aggiunta di repository al settings.xml in questo modo:

<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> 

Poi, i file jar SNAPSHOT sono stati scaricati più che bene. Sospetto che quando Maven sa che si tratta di un repository istantaneo, prova sia con che senza uniqueVersion (vedi la risposta di Duncan Jones).

Si noti che nel nostro caso questi blocchi dovevano essere duplicati come pluginRepositories perché abbiamo plug-in Maven personalizzati.

+1

In realtà ciò che sta accadendo è che maven legge maven-metadata.xml nella cartella /com/mycompany/mylibrary/1.0-SNAPSHOT. Questo xml dice a Maven quale dovrebbe essere l'ultimo timestamp e il numero di build che dovrebbe usare. Maven quindi si gira e costruisce la richiesta per quella specifica versione specifica. Se Maven non riesce a trovare maven-metadata.xml, come nel caso in cui non si disponga di un repository di istantanee, farà una richiesta di grandine per la versione -SNAPSHOT per vedere se è presente. –

13

Il pattern che hai postato (mylibrary-1.0-20130213.125827-2.jar) è una versione di istantanea unica. Maven 3 ti costringe a utilizzare questo tipo di denominazione artefatto, ma in Maven 2 può essere prevenuto con una dichiarazione come:

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

Per utilizzare un'istantanea specifica nel progetto, dichiara come:

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

per utilizzare l'istantanea più conosciuto, dichiararla "vecchio stile":

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

si può trovare la risposta a questa similar question utile pure.

Problemi correlati