1、maven clean 是清除target目錄下的之前打好的jar包或者是war包;
2、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 clean 得到的jar包應該是最新的,除非其他方式修改jar包中的內容而不修改源代碼。
2. 平時可以用mvn install,而不進行chean節省時間(如果你覺得節省時間多的話),但最保險還是用 mvn clean install 生成最新的jar包或其他包
3. 不想用mvn clean又想保證jar包最新,建議添加 -Djar.forceCreation 參數
---------------------
作者:liangwanmian
來源:CSDN
原文:https://blog.csdn.net/liangwanmian/article/details/78458159
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!