Jaka jest różnica między „mvn deploy” w lokalnym repozytorium a „mvn install”?

95

Mój zespół korzysta z wewnętrznego repozytorium Team Maven, które jest udostępniane z serwera programistycznego przy użyciu Apache. Uruchamiamy również serwer Continuum CI na tej samej maszynie. Kompilacje Maven w Continuum są uruchamiane z celem „instalacja”, który kopiuje ostateczny artefakt bezpośrednio do katalogu współdzielonego.

Pytanie brzmi, jaka jest różnica między dodawaniem plików do udostępnionego repozytorium przy mvn installużyciu celu wdrożenia (wtyczka mvn-deploy) a użyciem?

Wydaje mi się, że używanie mvn deploystwarza dodatkowe kłopoty z konfiguracją, ale czytałem gdzieś, że instalowanie plików do udostępnionego repozytorium jest złym pomysłem z jakiegoś powodu związanego z wewnętrznym działaniem mavena.

aktualizacja: dostaję funkcjonalne różnice między deployi install; Właściwie bardziej interesują mnie szczegóły niskiego poziomu dotyczące tego, jakie pliki są tworzone w repozytorium maven.

Ken Liu
źródło

Odpowiedzi:

167

Ken, dobre pytanie. Powinienem bardziej szczegółowo opisać tę różnicę w The Definitive Guide . „Instalacja” i „Wdrożenie” służą dwóm różnym celom w kompilacji. „instalacja” odnosi się do procesu instalowania artefaktu w lokalnym repozytorium. „Wdrażanie” odnosi się do procesu rozmieszczania artefaktu w zdalnym repozytorium.

Przykład:

  1. Kiedy uruchamiam duży projekt wielomodułowy na moim komputerze, zazwyczaj uruchamiam „mvn install”. Spowoduje to zainstalowanie wszystkich wygenerowanych binarnych artefaktów oprogramowania (zwykle plików JAR) w moim lokalnym repozytorium. Następnie, kiedy buduję poszczególne moduły w kompilacji, Maven pobierze zależności z lokalnego repozytorium.

  2. Kiedy przyjdzie czas na wdrożenie migawek lub wersji, zamierzam uruchomić „mvn deploy”. Uruchomienie tego spowoduje próbę wdrożenia plików do zdalnego repozytorium lub serwera. Zwykle zamierzam wdrażać do menedżera repozytorium, takiego jak Nexus

Prawdą jest, że uruchomienie „wdrożenia” będzie wymagało dodatkowej konfiguracji, będziesz musiał dostarczyć sekcję DistributionManagement w swoim POM.

Tim O'Brien
źródło
@Tim, więc jaka dokładnie jest zaleta mvn deploy? Jakie korzyści daje dodatkowa konfiguracja, która była wymagana w pierwszej kolejności?
Geek
4
Wdrażanie służy do wdrażania artefaktów na serwerze zdalnym. Jest to zupełnie inny przypadek użycia niż instalacja.
Tim O'Brien
17

Z dokumentacji Maven wygląda na to, że to tylko różnica w tym, w którym repozytorium zainstalujesz pakiet:

  • install - zainstaluj pakiet w lokalnym repozytorium, aby użyć go jako zależności w innych projektach lokalnie
  • wdrażanie - wykonywane w środowisku integracji lub wydania, kopiuje ostateczny pakiet do zdalnego repozytorium w celu udostępnienia innym programistom i projektom.

Może jest jakieś zamieszanie w tej „instalacji” na serwerze CI, który instaluje go w swoim lokalnym repozytorium, które następnie udostępniasz jako użytkownik?

matowe b
źródło
4

„matt b” ma rację, ale mówiąc konkretnie, cel „instalacja” kopiuje zbudowany cel do lokalnego repozytorium w systemie plików; przydatne w przypadku małych zmian w projektach, które obecnie nie są przeznaczone dla całej grupy.

Cel „Wdrożenie” przesyła go do współużytkowanego repozytorium po zakończeniu pracy, a następnie może być udostępniony innym osobom, które tego potrzebują w swoim projekcie.

W twoim przypadku wydaje się, że „Install” jest używany do zarządzania rozmieszczenia łatwiejsze, ponieważ lokalne repo USK jest wspólna repo. Gdyby CI znajdował się na innym pudełku, musiałby użyć celu „wdrożenie”.

Spencer Kormos
źródło