2013-03-20 132 views
89

我是Maven的新手,我有一個基於Java的Web項目,並在MyEclipse中配置了maven。
現在,如果我修改任何Java文件,那麼我需要做Run as -> Mvn installMvn packageMvn安裝或Mvn包

+0

請發表您的'pom.xml'。很難說不知道你的項目配置是什麼! – Ankit 2013-03-20 17:43:18

+8

95%的時間使用'mvn install','mvn package'很少。 – Johan 2013-03-20 17:45:34

+6

mvn install shoudl只把你的jar放到本地倉庫 - 我沒有看到有什麼真正的理由爲什麼要用web(war)項目來做到這一點? – Hurda 2013-03-20 20:43:56

回答

19

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目錄並重新創建該位置的所有罐子。
乾淨有助於不需要或刪除的東西,有時可能會阻礙。
而不是調試(有些時候)只是開始新鮮的時間。

+15

我不同意這個軟件包很少用於2點。 1)每次運行安裝時都會運行。 2)如果你正在製作一個.war,那麼只需運行包就可以了,因爲你不需要在本地回購中進行戰爭。 – 2014-01-15 16:04:28

+2

答案沒有解釋,你爲什麼更願意安裝到本地存儲庫。根據我的理解,如果項目設置正確,那麼反應堆將提供模塊之間的依賴關係。如果項目設置不正確,則安裝可能會隱藏這一事實並使用錯誤的工件。如果您有相關的項目,必須由於某種原因單獨構建,那麼您只需要安裝。 – 2015-08-17 13:41:16

0

這取決於您在更改Java文件後要實現的目標。在你想測試maven過程之前,你永遠不需要做任何事情。 Eclipse/MyEclipse將構建必要的東西並將輸出放在項目中的適當位置。您也可以運行或部署它(例如,如果它是一個Web項目),而不需要明確地使用maven做任何事情。最後,要在Maven倉庫中安裝你的項目,你需要做一個Maven安裝。你也可能有其他想要執行的Maven目標,MyEclipse不會自動執行。

正如我所說,這取決於你想要做什麼。

2

包 - 使編譯的代碼,並在其分發格式打包,諸如JAR或WAR文件。 安裝 - 軟件包安裝到本地倉庫,用作其他項目的依賴本地

5

Lifecycle reference安裝將運行項目的集成測試,不會。

如果您確實需要不安裝生成的工件,請至少使用驗證

3

如果你不使用一個遠程庫(如artifactory的),使用普通的老: mvn clean install

很老的話題,但據我所知,如果您有自己的倉庫(如:帶artifactory的)分享你的團隊(S)之間的罐子,你可能想使用

mvn clean deploy

代替。

這樣,您的持續集成服務器可以確保將所有依賴關係正確地推送到遠程存儲庫中。如果你錯過了,mvn將無法找到你的CI本地m2存儲庫。

+1

我想你是在談論mvn clean部署,而不是mvn clean package – Mayjak 2016-01-18 16:42:17

+0

的確,感謝@Estarriol,我更新了我的答案。 – user1853859 2016-01-20 20:53:13

3

另外你應該注意的是,如果你的項目是由多個相互依賴的模塊組成的,你應該使用「install」而不是「package」,否則你的編譯會失敗,當你使用install命令時, A將打包並部署到本地存儲庫,然後如果模塊B需要模塊A作爲依賴項,則可以從本地存儲庫訪問它。

1

正確方式是mvn package,如果你做了正確的事情爲你構建的核心部分,那麼應該沒有必要安裝你的包在本地倉庫。

此外,如果您使用Travis,則可以「緩存」您的依賴關係,因爲如果您將包用於自己的項目,它將不會觸及您的$HOME.m2/repository

實際上,如果你甚至試圖做一個mvn site你通常需要做一個mvn install之前。 site中的錯誤太多,或者它的許多維護不當的插件。