2009-08-13 17 views
5

Chcę zmusić Mavena do pobrania "maven-metadata.xml" dla każdego artefaktu, który mam w moim lokalnym repozytorium.Jak zmusić Mavena do pobrania maven-metadata.xml z centralnego repozytorium?

Domyślnym zachowaniem Mavena jest pobieranie tylko metadanych ze zdalnych repozytoriów (patrz this question).

Dlaczego chcę, aby to zrobić:

Obecnie mam zdalnego repozytorium działa na maszynie budowlanej. Przez zdalne repozytorium rozumiem katalog znajdujący się na komputerze kompilacji, który zawiera wszystkie zależności potrzebne do zbudowania moich projektów Maven. Zwróć uwagę, że nie używam menedżera repozytorium takiego jak Nexus, repozytorium jest po prostu kopią lokalnego repozytorium, które przesłałem na moją maszynę.

Ponieważ jednak moje lokalne repozytorium nie zawierało plików "maven-metadata.xml", tych plików metadanych również brakuje w repozytorium komputera kompilacji. Gdybym mógł pobrać pliki metadanych z centralnego repozytorium, możliwe byłoby przesłanie działającego zdalnego repozytorium do mojej maszyny budującej.

+0

nie jestem jasne, co dokładnie masz na myśli, dlaczego trzeba to zrobić. Czy możesz wyjaśnić, co próbujesz osiągnąć? –

Odpowiedz

8

Nie chcesz otrzymywać metadanych z repozytoriów publicznych, zawierają one wszystkie dostępne wersje danego artefaktu, podczas gdy repozytorium będzie miało pewien podzbiór wydań.

Warto podkreślić, że naprawdę lepiej byłoby mieć menedżera repozytorium. Poniższe czynności umożliwiają jednorazowe wygenerowanie metadanych artefaktów. Ale jeśli twoje potrzeby ulegną zmianie, będziesz musiał powtórzyć proces lub zaktualizować pliki ręcznie, więc dlaczego nie skorzystać z menedżera? Nexus może działać samodzielnie i ma bardzo mały ślad.


Nawet jeśli nie planujesz korzystania Nexus dla repozytorium menedżera, nadal można go używać do generowania metadanych.

  1. Pierwszy install Nexus.
  2. Zlokalizuj katalog roboczy nexus (domyślnie $ {user.home}/sonatype-pracy.
  3. Skopiuj zawartość lokalne repozytorium do/releases podkatalogu nexus-pracy.
  4. Start Nexus i podłączyć do Nexusa strona główna w przeglądarce (domyślnie http://localhost:8081/nexus)
  5. Zaloguj się przy użyciu konta administratora (hasło admin123)
  6. Kliknij na baz link po lewej stronie.
  7. Wybierz prasowe repozytorium prawym przyciskiem myszy i kliknij Rebuild metadanych

W kilku chwilach powinieneś mieć metadane wygenerowany dla wszystkich artefaktów. Następnie możesz skopiować je tam, gdzie chcesz, i odinstalować Nexusa.

+1

Zgadzam się, potrzebuje wspólnych repozytoriów dla maszyn budujących i lokalnych. Nie ma sposobu, aby zachować dwie kopie metadanych zsynchronizowanych. – sal

+1

Rozwiązanie zadziałało właśnie dla mnie. Ponadto dzięki salowi za poradę, ale to, czego naprawdę potrzebuję, to obejście tego problemu, mimo że rozumiem, że nie jest to idealne rozwiązanie ... –

4

Domyślne repozytoria są zdefiniowane w super pom.xml, które wszystkie poms domyślnie dziedziczą.

Jeśli przez lokalny masz na myśli, że chcesz używać tylko ~/.m2/repos/*, to pracuj w trybie offline. Dodaj <offline>true</offline> do listy settings.xml

Jeśli przez lokalny znaczy swój lokalny serwer, można zainstalować repozytorium menedżera jak Nexus, zmodyfikować plik ustawień użyć nexus pod „lustrami” tak:

<mirror> 
    <id>central-proxy</id> 
    <mirrorOf>central</mirrorOf> 
    <url>my/local/nexus/server</url> 
</mirror> 

I wyłączaj zdalne repozytoria, których nie chcesz w Nexusie.

+0

Przez lokalny mam na myśli ~/.m2/repos/*, jednak jeśli użyjesz tagu lub -o flag Maven nie pobierze plików "maven-metada.xml", które chcę. –

+0

Myślę, że musisz mieć różne kompilacje i wdrażać repos dla ciebie zdalnej maszyny. Niech maszyna budująca użyje lokalnego repozytorium maven do zbudowania, a następnie innego miejsca na dysku do rozmieszczenia. Użyj serwera, aby to drugie repozytorium było widoczne. Będziesz także chciał wdrożyć lokalne kompilacje do tych 3 repozytoriów. Metadane zostaną uporządkowane w takiej sytuacji. – sal

+0

co i dlaczego ''? powyższy opis pomaga mi. – hari

1

Jedną z rzeczy, którą znalazłem, było to, że ktoś przeprowadzał wstępne wyszukiwanie jarvany i umieścił to wewnątrz pom, powodując pojawienie się komunikatu o błędzie metadanych. To ...

<!-- <repository> 
     <id>jarvana</id> 
     <url>http://www.jarvana.com/jarvana/browse/</url> 
    </repository> --> 

.. Naprawiono błąd i błąd zniknął.

0

Manager repozytorium jest świetny, ale nie chcę instalować go i uruchamiać na moim laptopie. Chcę tylko oszczędzać zasoby. Więc moje rozwiązanie jest poniżej:

  1. zainstalować repozytorium jako artifactory (https://www.jfrog.com/artifactory)
  2. prowadzony zmaterializować przez ten serwer (localhost: 8081)
  3. prowadzony zmaterializować thru zdalnym serwerze (center.maven.org)
  4. pobierz zawartość pamięci podręcznej artifactory
  5. połączenie z folderem: folder pobrany z kroku 4 i folder w ~/.m2/repository.

Teraz mam repozytorium w trybie offline z pełną zawartością (binarny, źródło, XML, MD5, SHA1)