2013-03-20 2 views
89

Я новичок в Maven, у меня есть веб-проект на основе Java с maven, настроенный в MyEclipse.
Теперь, если я модифицировал любые java-файлы, тогда мне нужно сделать Run as -> Mvn install или Mvn package?Mvn install или Mvn package

+0

Пожалуйста, напишите свой 'pom.xml'. Его трудно сказать, не зная, что вы проектируете конфигурацию! – Ankit

+8

'mvn install' используется в 95% случаев,' mvn package' очень редко. – Johan

+6

mvn install shoudl только помещает вашу банку в локальный репозиторий - я не вижу реальной причины, почему это нужно сделать с веб-проектом? – Hurda

ответ

19

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

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

Обратите внимание, что mvn package будет только создать файл JAR.
mvn install будет делать это и установить файлы в банке (и классе и т. Д.) В соответствующих местах, если другой код зависит от этих банок.

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

+15

Я не согласен, что пакет редко используется на 2 очка. 1) Он запускается каждый раз при запуске установки. 2) Если вы делаете .war, тогда просто запускается пакет, потому что вам не нужна война в вашем местном репо. –

+2

Ответ не объясняет, почему вы предпочитаете устанавливать его в локальный репозиторий. По моему мнению, если проекты будут настроены правильно, то реактор будет обеспечивать зависимости между модулями. Если проекты не настроены правильно, установка может просто скрыть этот факт и использовать неправильные артефакты. Если у вас есть зависимые проекты, которые по какой-то причине должны быть построены отдельно, только тогда вы захотите установить. –

113

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

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

install: установить пакет в локальный репозиторий, для использования в качестве зависимости в других проектах локально

Таким образом, ответ на ваш вопрос, это зависит от того, хотите ли вы его установили в ваш местный Сделки рЕПО. Установка также запускает пакет, потому что он выше в стеке цели.

0

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

Как я уже сказал, это зависит от того, что вы хотите сделать.

2

package - принимает скомпилированный код и упаковывает его в распространяемый формат, такой как файл JAR или WAR. установить - установить пакет в локальный репозиторий, для использования в качестве зависимости в других проектах локально

5

Из Lifecycle reference, установить будет запускать тесты интеграции проекта, пакета не будет.

Если вам действительно не нужно устанавливать сгенерированные артефакты, используйте, по крайней мере, , проверьте.

3

Если вы не с помощью удаленного хранилище (например, Artifactory), использовать обычный старый: mvn clean install

Довольно старая тема, но AFAIK, если вы используете свой собственный репозиторий (например: с Artifactory) поделиться баночку среди вашей команды (ы), вы можете использовать

mvn clean deploy

вместо этого.

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

+1

Я думаю, что вы говорите о mvn clean deploy, а не о mvn clean package – Mayjak

+0

Действительно, спасибо @Estarriol, я обновил свой ответ. – user1853859

3

Также вы должны отметить, что если ваш проект состоит из нескольких модулей, которые зависят друг от друга, вы должны использовать «install» вместо «package», иначе ваша сборка завершится неудачно, если вы используете команду установки, модуль A будет упакован и развернут в локальный репозиторий, а затем, если модуль B нуждается в модуле A в качестве зависимости, он может получить к нему доступ из локального репозитория.

1

собственно путь mvn package, если вы сделали все правильно для основной части вашей сборки, то не должно быть никакой необходимости устанавливать свои пакеты в локальном хранилище.

Кроме того, если вы используете Travis, вы можете «кэшировать» свои зависимости, потому что он не коснется вашего $HOME.m2/repository, если вы используете пакет для своего собственного проекта.

В практическом отношении, если вы даже попытаетесь сделать mvn site, вам обычно нужно сделать mvn install. Слишком много ошибок с site или многочисленными слабо поддерживаемыми плагинами.