Maven Build、Clean、Install指令

maven指令

Maven Build 等同於Maven命令:html

1java

mvn packageapache

對Maven工程進行打包。eclipse

 

Maven Clean等同於Maven命令:maven

1ide

mvn clean測試

表示刪除maven工程的target目錄下的內容。ui

 

Maven Install等同於命令:spa

1.net

mvn install

表示將jar包發佈到本地maven倉庫。

 

標準的Maven項目包層次結構:

-Project

--src/main/java

--src/main/resources

--src/test/java(若是是用-DskipTests,那麼也會編譯這些測試類,可是若是勾選Skip tests則不會)

--src/test/resources(若是是用-DskipTests,那麼也會編譯這些資源文件,可是若是勾選Skip tests則不會)

上面是對在eclipse中運用該命令的說明;

一、maven clean 是清除target目錄下的以前打好的jar包或者是war包;

二、maven build是從新對該maven項目進行打包,這裏須要手動的輸入打包的命令   -X package

上面的兩部命令合在一塊兒 maven install是對上面兩個命令的集合,既是經過maven自帶的原生命令,同時執行了clean 和build,比較節省時間;

那麼問題就來了,爲何單獨執行有時會出錯呢,這就能夠說明 maven 對eclipse外帶的插件執行不友好;

下面是一個大神的另外一個問題的總結:

以前寫代碼的過程當中曾經遇到過問題,用mvn install後,新改的內容不生效,必定要使用mvn clean install 才生效,因而想看看clean和不clean的區別。

正如你們所知的,maven在執行一個生命週期的命令時會執行以前的全部生命週期操做,好比執行mvn install,會執行前面一系列的動做包括 compile , package , test 等,具體請查看maven的官方文檔。這個特性使maven的命令更加簡潔易用。

再來分析原來的問題,爲何修改的內容不生效,確定是最終打出來的war包中的內容沒有更新,而war包中會依賴其餘子工程的jar包,若是jar 包沒有更新過,那war包調用老的jar包也會致使新內容不生效。定位到問題的緣由應該是jar包沒有用最新的資源(java或者配置文件),那jar包又是何時,誰去打的呢。

上面咱們提到咱們執行mvn install的時候會先執行mvn package,maven就是經過這個生命週期來根據用戶配置,進行打包(war、jar或者其餘)的,這會在每一個工程 pom.xml 文件中設置,相似以下:

<project xmlns="http://maven.apache.org/POM/4.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0

http://maven.apache.org/xsd/maven-4.0.0.xsd">

  ...
  <packaging>war</packaging>
  ...
</project>

這裏指定package的時候打成一個war包,改爲jar,就會被打成jar包。

咱們看jar形式的狀況,mvn package 會調用 maven-jar-plugin 這個插件進行打包。
下面咱們作一些實驗來看這個插件打包的時候的狀況

1. 修改target目錄下打好的jar包中class以及配置文件的內容,在運行命令mvn package,結果target包中的內容沒有被覆蓋。
2. 修改源代碼中的內容,再運行命令mvn package,結果target包中的內容被覆蓋了,產生了新的包。
3. 修改target目錄下打好的jar包中的內容,運行命令mvn package -Djar.forceCreation,這個參數應該是強制建立jar包,因此結果target中的jar包內容被覆蓋了,產生了新的jar包。

根據上面的實驗好像仍是不能解釋何時應該用clean將target下面的內容刪除從新生成jar包,不過至少是明白了一些規則。

總結
1. 平時能夠用mvn install,而不進行chean節省時間(若是你以爲節省時間多的話),但最保險仍是用 mvn clean install 生成最新的jar包或其餘包
2. 不想用mvn clean又想保證jar包最新,建議添加 -Djar.forceCreation 參數 

 

部份內容借鑑自:

https://blog.csdn.net/liangwanmian/article/details/78458159

相關文章
相關標籤/搜索