Mvn install lub pakiet Mvn

134

Jestem nowy w Maven, mam projekt sieci web oparty na Javie z maven skonfigurowanym w MyEclipse.
Czy teraz, jeśli zmodyfikowałem jakiekolwiek pliki java, muszę to zrobić, Run as -> Mvn installczy Mvn package?

user2192023
źródło

Odpowiedzi:

159

z http://maven.apache.org/guides/getting-started/maven-in-five-minutes.html

package: weź skompilowany kod i zapakuj go w formacie przeznaczonym do dystrybucji, takim jak JAR.

install: zainstaluj pakiet w lokalnym repozytorium, aby użyć go jako zależności w innych projektach lokalnie

Tak więc odpowiedź na twoje pytanie jest taka, że ​​zależy to od tego, czy chcesz go zainstalować w lokalnym repozytorium. Instalator również uruchomi pakiet, ponieważ znajduje się on wyżej w stosie fazy celu.

ezcodr
źródło
Mam projekt, w którym konwertuję kod folderu głównego i kod folderu testowego na Jar. Następnie chcę wdrożyć to w Nexusie, aby mogło być używane w innych projektach. Moje polecenie wdrażania to „mvn clean deploy -DskipTests”. Czy mogę utworzyć ten pakiet poleceń zamiast instalować go w lokalnym repozytorium?
MasterJoe
@ MasterJoe2 "W takim razie chcę wdrożyć to w nexusie" Tak właśnie deploydziała. Jeśli zamienisz go na package, nie zostanie wdrożony na Nexusie.
walen
38

mvn installjest najczęściej używaną opcją.
mvn packagejest rzadko używany, tylko jeśli debugujesz jakiś problem z procesem budowania Mavena.

Zobacz: http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html

Zauważ, że mvn packageutworzy tylko plik jar.
mvn installzrobi to i zainstaluje pliki jar (i class itp.) w odpowiednich miejscach, jeśli inny kod zależy od tych jar.

Zwykle robię mvn clean install; spowoduje to usunięcie targetkatalogu i odtworzenie wszystkich plików JAR w tej lokalizacji.
Czyszczenie pomaga w usuwaniu niepotrzebnych lub usuniętych rzeczy, które czasami mogą przeszkadzać.
Zamiast debugowania (czasami) po prostu zaczynaj cały czas od nowa.

Johan
źródło
27
Nie zgadzam się, że pakiet jest rzadko używany w dwóch punktach. 1) Uruchamia się za każdym razem, gdy uruchamiasz instalację. 2) Jeśli tworzysz plik .war, wystarczy uruchomić pakiet, ponieważ nie potrzebujesz wojny w lokalnym repozytorium.
Joshua Wilson
5
Odpowiedź nie wyjaśnia, dlaczego wolisz zainstalować w lokalnym repozytorium. W moim rozumieniu, jeśli projekty są prawidłowo skonfigurowane, to reaktor zapewni zależności między modułami. Jeśli projekty nie są poprawnie skonfigurowane, instalacja może po prostu ukryć ten fakt i użyć niewłaściwych artefaktów. Jeśli masz zależne projekty, które z jakiegoś powodu muszą być zbudowane osobno, tylko wtedy chcesz zainstalować.
Vsevolod Golovanov
12

Z odniesieniem Lifecycle , instalacja będzie działać testów integracyjnych projektu, pakiet nie będzie.

Jeśli naprawdę nie musisz instalować wygenerowanych artefaktów, użyj przynajmniej weryfikacji .

dna
źródło
Połączeni doktorzy mówią „Jeśli nie masz pewności, czego chcesz, preferowaną fazą rozmowy jest mvn verify”. Jest to więc dość ostateczna odpowiedź na pierwotne pytanie.
Brent Bradburn
5

Powinieneś również zauważyć, że jeśli twój projekt składa się z kilku modułów, które są od siebie zależne, powinieneś użyć "zainstaluj" zamiast "pakiet", w przeciwnym razie twoja kompilacja się nie powiedzie, ponieważ gdy użyjesz polecenia instalacji, moduł A zostanie spakowany i wdrożony do lokalnego repozytorium, a następnie, jeśli moduł B potrzebuje modułu A jako zależności, może uzyskać do niego dostęp z lokalnego repozytorium.

Panie Q
źródło
4

Jeśli nie używasz zdalnego repozytorium (takiego jak Artifactory), użyj zwykłego starego: mvn clean install

Dość stary temat, ale AFAIK, jeśli prowadzisz własne repozytorium (np. Z artifactory), aby udostępniać jar między swoim zespołem (zespołami), możesz użyć

mvn clean deploy

zamiast.

W ten sposób serwer ciągłej integracji może mieć pewność, że wszystkie zależności są poprawnie umieszczone w repozytorium zdalnym. Jeśli go przegapiłeś, mvn nie będzie w stanie znaleźć go w twoim lokalnym repozytorium m2 CI.

user1853859
źródło
1
Myślę, że mówisz o czystym wdrożeniu mvn, a nie czystym pakiecie mvn
Mayjak
2

pakiet - pobiera skompilowany kod i pakuje go w jego dystrybuowalnym formacie, takim jak plik JAR lub WAR. install - zainstaluj pakiet w lokalnym repozytorium, aby użyć go jako zależności w innych projektach lokalnie

Elilmatha Sivanesan
źródło
2

Właściwy sposób to mvn packagejeśli zrobiłeś wszystko poprawnie do głównej części swojej produkcji wtedy nie powinno być potrzeby instalowania paczek w lokalnym repozytorium.

Ponadto, jeśli używasz Travisa, możesz "buforować" swoje zależności, ponieważ nie będą one dotykać twoich, $HOME.m2/repositoryjeśli używasz pakietu do własnego projektu.

W praktyce, jeśli nawet spróbujesz to zrobić mvn site, zwykle musisz to zrobić mvn installwcześniej. Jest po prostu zbyt wiele błędów w jednym z nich sitelub wiele źle utrzymywanych wtyczek.

Archimedes Trajano
źródło
0

To zależy od tego, co próbujesz osiągnąć po zmianie pliku Java. Dopóki nie zechcesz przetestować procesu maven, nigdy nie musisz nic robić. Eclipse / MyEclipse zbuduje to, co jest konieczne, i umieści dane wyjściowe w odpowiednim miejscu w projekcie. Możesz go również uruchomić lub wdrożyć (na przykład jeśli jest to projekt sieci Web), bez konieczności jawnego wykonywania czegokolwiek z maven. W końcu, aby zainstalować projekt w repozytorium mavena, będziesz musiał wykonać instalację mavena. Możesz także mieć inne cele maven, które chcesz zrealizować, których MyEclipse nie zrobi automatycznie.

Jak mówię, to zależy od tego, co chcesz zrobić.

Tony Weddle
źródło