2010-11-04 19 views
20

Nasze wewnętrzne repozytorium (Artifactory) zawiera teraz zarówno stabilne kompilacje, jak i wersje SNAPSHOT naszych wewnętrznych bibliotek.Maven nie może uzyskać kompilacji SNAPSHOT z repozytorium

Dla stabilnych kompilacji nigdy nie było problemu z pobieraniem czegokolwiek z repozytorium.

Jednak po dodaniu -SNAPSHOT, Maven twierdzi, że nie może znaleźć zależności, nawet jeśli jest to zdecydowanie w repozytorium.

Jeśli buduję i wdrażam zależność lokalnie (tj. W moim lokalnym repozytorium), wszystko działa normalnie.

zasadzie to działa:

<dependency> 
    <groupId>com.example</groupId> 
    <artifactId>ourlibrary</artifactId> 
    <version>1.0.0</version> 
</dependency> 

i to nie:

<dependency> 
    <groupId>com.example</groupId> 
    <artifactId>ourlibrary</artifactId> 
    <version>1.0.1-SNAPSHOT</version> 
</dependency> 

Choć obie wersje zostały zbudowane w ten sam sposób i stosowane (o ile mogę ewentualnie powiedzieć) poprawnie do repozytorium.

Błąd:

Missing: 
---------- 

1) com.example:ourlibrary:jar:1.0.1-SNAPSHOT, 

    Try downloading the file manually from the project website. 

    Then, install it using the command: 
     mvn install:install-file -DgroupId=com.example -DartifactId=ourlibrary -Dversion=1.0.1-SNAPSHOT, -Dpackaging=jar -Dfile=/path/to/file 

    Alternatively, if you host your own repository you can deploy the file there: 
     mvn deploy:deploy-file -DgroupId=com.example -DartifactId=ourlibrary -Dversion=1.0.1-SNAPSHOT, -Dpackaging=jar -Dfile=/path/to/file -Durl=[url] -DrepositoryId=[id] 

    Path to dependency: 
     1) com.example:product:war:2.0.0-SNAPSHOT 
     2) com.example:ourlibrary:jar:1.0.1-SNAPSHOT, 

Choć brzmi to podobnie do this pytaniu rozdzielczości przybył tam nie ma zastosowania do mojego przypadku.

Wszelkie spostrzeżenia na ten temat byłyby bardzo mile widziane.

Edit

Biegając z -x (jako John V. sugerowane) ujawniła następujące:

[DEBUG] Skipping disabled repository central 
[DEBUG] ourlibrary: using locally installed snapshot 
[DEBUG] Skipping disabled repository central 
[DEBUG] Using mirror: http://repo.example.com/repo (id: repo.example.com) 
[DEBUG] Artifact not found - using stub model: Unable to download the artifact from any repository 

    com.example:ourlibrary:pom:1.0.1-SNAPSHOT 

from the specified remote repositories: 
    repo.example.com (http://repo.example.com/repo) 


[DEBUG] Using defaults for missing POM com.example:ourlibrary:pom:1.0.1-SNAPSHOT:compile 
[DEBUG] com.example:ourlibrary:jar:1.0.1-SNAPSHOT:compile (selected for compile) 

Odpowiedz

12

Dwie myśli przychodzą do głowy:

  1. Struktura ścieżka w twoje wewnętrzne repozytorium dla twojego artefaktu jest nieprawidłowe. Sugeruję uruchomienie polecenia maven z parametrem -X. To wyświetli próbę maven pod adresem pobierając pliki. Uzyskaj linię , która ma twoje repozytorium jako adres url i spróbuj i poszukaj go sam.

    Ścieżka powinna wyglądać

    /com/example/ourlibrary/1.0.1/ourlibrary-1.0.1-SNAPSHOT.jar

  2. zrobił dołączyć repozytorium jako repozytorium w swojej pom. xml
+2

nie deklarują repo w POM, ale raczej określony w ustawieniach maven że nasza repo był uniwersalny (*) lustro.Czy nie powinno to być wystarczające (na pewno wystarczy na stabilne konstrukcje)? Dodanie wyraźnej deklaracji do POM wydaje się rozwiązać problem. – Kris

+0

Niestety nie wykonałem zbyt wiele pracy z plikiem settings.xml dla repozytoriów. Zawarłem je w macierzystej pompce, więc każdy programista rozpoczynający pracę, nie musi się martwić o plik settings.xml, na wypadek gdyby repozytorium musiało się zmienić (co faktycznie ma dla nas). –

+14

Myślę, że już to zrozumiałem. W przypadku stabilnych kompilacji, Maven będzie domyślnie "centralną", którą moje ustawienia lustrzane przekierowują do naszego repozytorium. W przypadku kompilacji SNAPSHOT nie ma wartości domyślnej (ponieważ centrala nie obsługuje ich) i w przypadku braku POM określającego repo (które * obsługuje * kompilacje SNAPSHOT), po prostu nie powiedzie się, nawet nie próbując wyszukać. – Kris

11

Zwykle masz osobny adres URL migawek z adresu URL wydania. Tylko różne ścieżki w tym samym repozytorium, ale wymienione w oddzielnych repozytoriach w pom. Jeden dla migawek musi mieć migawki włączona, a jeden dla wydań posiada zrzuty wyłączone:

<repositories> 
     <repository> 
      <id>central</id> 
      <url> 
       http://<releases-url> 
      </url> 
      **<snapshots> 
       <enabled>false</enabled> 
      </snapshots>** 
     </repository> 

     <repository> 
      <id>snapshots</id> 
      <url> 
       http://<snapshots-url> 
      </url> 
      <snapshots> 
       **<enabled>true</enabled>** 
       <!-- never, daily, interval:X (where X is in minutes) or always --> 
       <!--<updatePolicy>daily</updatePolicy> --> 
      </snapshots> 
      <releases> 
       <enabled>false</enabled> 
      </releases> 
     </repository> 
    </repositories> 
+0

Działa to, chociaż należy pamiętać, że jest to w sekcji profili pliku settings.xml Maven. – Kris

+0

Zachowujemy go w naszym głównym/macierzystym pliku pom, z którego wszystkie nasze projekty dziedziczą. W ten sposób programiści nie muszą konfigurować tego w swoich plikach settings.xml. Ustawienia.xml dotyczą głównie rzeczy, które są specyficzne dla maszyny lub użytkownika, a wszyscy programiści projektu zazwyczaj korzystają z tego samego repozytorium. Chociaż można umieścić repozytoria w pliku settings.xml, uważam, że byłby to wyjątek, a nie norma. – kevinmrohr

+0

Bardzo dziwne, że mogę wdrożyć migawki bez tego, ale nie można pobrać wdrożonych shapshotów. Konfiguracja profilu działa dobrze. – Betlista

Powiązane problemy