2013-02-14 14 views
5

Mój artefakt maven został wdrożony w repozytorium migawek Nexusa. Tam, jest on przechowywany w odpowiednim katalogu, ale jego nazwy plików mają następujące wzór:Maven: Dlaczego brakuje sufiksu -SNAPSHOT w nazwie pliku artefaktu?

mylibrary-1.0-20130213.125827-2.jar 

jednak Maven zawiedzie pobrać tę migawkę. Według dziennika błędów, Maven wydaje się oczekiwać następującą nazwę pliku:

mylibrary-1.0-SNAPSHOT.jar 

Są repozytorium ustawienia w moim 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> 

Uwaga: grupa nexus obejmuje zarówno repo releases i snapshots .

Nie skonfigurowałem tych repozytoriów w settings.xml - czy to jest problem? Albo co jeszcze robię źle?

+1

Mówisz: "* Maven wydaje się oczekiwać ... *". Czy otrzymujesz błąd, gdy postępujesz zgodnie z moją radą i podasz 'mylibrary-1.0-20130213.125827-2.jar' jako' mylibrary-1.0-SNAPSHOT'? –

Odpowiedz

5

Zrobiłem to działa poprzez dodanie repozytoriów do settings.xml tak:

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

Następnie pliki jar SNAPSHOT zostały pobrane po prostu w porządku. Podejrzewam, że kiedy Maven wie, że chodzi o repozytorium snapshot, próbuje zarówno z unikalną wersją, jak i bez niej (patrz odpowiedź Duncana Jonesa).

Pamiętaj, że w naszym przypadku bloki te musiały zostać skopiowane jako pluginRepositories, ponieważ mamy niestandardowe wtyczki Mavena.

+1

W rzeczywistości dzieje się tak, że maven czyta plik maven-metadata.xml w folderze /com/mycompany/mylibrary/1.0-SNAPSHOT. Ten xml mówi mafii o tym, jaki powinien być najnowszy znacznik czasu i numer kompilacji. Maven następnie odwraca się i konstruuje żądanie dla tej konkretnej unikalnej wersji. Jeśli Maven nie może znaleźć pliku maven-metadata.xml, jak to by było w przypadku, gdyby nie było repozytorium migawek, wykona on prośbę gradową dla wersji -SNAPSHOT, aby sprawdzić, czy jest tam. –

13

Opublikowany wzór (mylibrary-1.0-20130213.125827-2.jar) to wyjątkowa wersja migawki. Maven 3 zmusza do korzystania z tego typu artefakt nazewnictwa, ale w Maven 2 można zapobiegać takim oświadczeniem, jak:

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

Aby użyć określonej migawkę w projekcie, zadeklarować ją jako:

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

Aby korzystać z najnowszej znanej migawkę, oświadczam go „starym stylu”:

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

można znaleźć odpowiedź na to similar question pomocny.

Powiązane problemy