Mvn встановити або Mvn пакет


134

Я новачок у Maven, у мене є веб-проект на базі Java з maven, налаштований у MyEclipse.
Тепер, якщо я змінив будь-які файли Java, то мені це потрібно зробити Run as -> Mvn installчи Mvn package?

Відповіді:


158

від http://maven.apache.org/guides/getting-started/maven-in-five-minutes.html

package: візьміть складений код і запакуйте його у своєму форматі, що роздається, наприклад, JAR.

install: встановіть пакет у локальне сховище для використання як залежність в інших проектах на місцевому рівні

Отже, відповідь на ваше запитання полягає в тому, що це залежить від того, чи хочете ви його встановити у ваше місцеве репо. Інсталяція також запустить пакет, оскільки він вище в цілі фази цілей.


У мене є проект, де я перетворюю основний код папки та код тестової папки в Jar. Потім я хочу розгорнути це в nexus, щоб його можна було використовувати в інших проектах. Моя команда розгортання - "mvn clean -loski -DskipTests". Чи можу я зробити цей пакет команд, а не встановлювати в локальний репо?
MasterJoe

@ MasterJoe2 "Тоді я хочу розгорнути це в nexus" Це те, що deployробиться. Якщо ви заміните його package, він не буде розгорнуто до Nexus.
walen

37

mvn install- це варіант, який найчастіше використовується.
mvn packageвикористовується рідко, лише якщо ви налагоджуєте якусь проблему з процесом збирання Maven.

Дивіться: http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html

Зверніть увагу, що mvn packageбуде створено лише файл jar.
mvn installзробимо це і встановіть файли jar (і класу тощо) у потрібні місця, якщо інший код залежить від цих банок.

Я зазвичай роблю а mvn clean install; це видаляє targetкаталог і відтворить усі банки в цьому місці.
Чистота допомагає з непотрібними або видаленими речами, які іноді можуть заважати.
Швидше тоді налагодження (деякий час) просто починати свіжим весь час.


27
Я не погоджуюся з тим, що пакет використовується рідко в двох пунктах. 1) Вона запускається щоразу, коли ви запускаєте установку. 2) Якщо ви робите .war, то просто запущений пакет добре, оскільки вам не потрібна війна у вашому місцевому репо.
Джошуа Вілсон

5
Відповідь не пояснює, чому ви віддаєте перевагу встановленню до локального сховища. На моє розуміння, якщо проекти налаштовані правильно, реактор забезпечить залежності між модулями. Якщо проекти не налаштовані правильно, то встановлення може просто приховати цей факт і використовувати неправильні артефакти. Якщо у вас є залежні проекти, які потрібно будувати окремо з якихось причин, лише тоді ви хочете встановити.
Всеволод Голованов

11

З посилань на життєвий цикл , встановити буде запускати тести інтеграції проекту, пакет не буде.

Якщо вам справді не потрібно встановлювати створені артефакти, використовуйте принаймні підтвердження .


5

Також слід зазначити, що якщо ваш проект складається з декількох модулів, які залежать один від одного, вам слід використовувати "встановити" замість "пакет", інакше збірка не вдасться, тому що при використанні команди встановити модуль A буде упакований і розміщено в локальному сховищі, і тоді, якщо модулю B потрібен модуль A як залежність, він може отримати доступ до нього з локального сховища.


4

Якщо ви не використовуєте віддалене сховище (наприклад, артефактичне), використовуйте старий звичайний: mvn clean install

Досить стара тема, але AFAIK. Якщо ви запускаєте власний сховище (наприклад, з артефактичним), щоб ділитися баночкою серед вашої команди, ви можете скористатися

mvn clean deploy

замість цього.

Таким чином, ваш сервер безперервної інтеграції може бути впевнений, що всі залежності правильно висунуті у ваше віддалене сховище. Якщо ви пропустили його, mvn не зможе знайти його у вашому локальному сховищі CI m2.


1
Думаю, ви говорите про mvn clean
installation

2

пакет - приймає скомпільований код і пакує його у своєму форматі, що розподіляється, наприклад, файл JAR або WAR. install - встановіть пакет у локальний сховище, щоб використовувати його як залежність в інших проектах на місцевому рівні


2

Правильний шлях , mvn packageякщо ви зробили все правильно для основної частини вашої збірки , то не повинно бути ніякої необхідності встановлювати свої пакети в локальному сховищі.

Крім того, якщо ви використовуєте Travis, ви можете «кешувати» свої залежності, оскільки це не торкнеться ваших, $HOME.m2/repositoryякщо ви використовуєте пакет для власного проекту.

На практиці, якщо ви навіть намагаєтеся зробити те, mvn siteвам зазвичай потрібно зробити це mvn installраніше. Там занадто багато помилок з будь-якими siteабо численними погано підтримуваними плагінами.


0

Це залежить від того, що ви намагаєтеся досягти після зміни файлу Java. Поки ви не хочете перевірити процес Maven, вам ніколи нічого не потрібно робити. Eclipse / MyEclipse створить необхідне і поставить результат у відповідне місце у вашому проекті. Ви також можете запустити або розгорнути його (якщо це, наприклад, веб-проект), не потребуючи явно нічого робити з maven. Зрештою, щоб встановити свій проект у сховищі Maven, вам потрібно буде зробити встановлення Maven. У вас також можуть бути інші головні цілі, які ви хочете виконати, які MyEclipse не виконає автоматично.

Як я кажу, це залежить від того, що ви хочете зробити.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.