轉:
詳解myeclipse和maven的clean和build
MyEclipse是一個被廣為使用的軟件,但是很多人用了很久,對它如何編譯,執行一個java工程卻沒有一個清楚的認識。比如,
- clean和build到底有什么區別?
- 直接run主類之前用不用clean一下?
- 直接clean和maven clean是不是一樣的?
- 直接build和maven build,結果相同嗎?
另外,在遇到最棘手的問題:
錯誤: 找不到或無法加載主類
的時候,很容易陷入懵逼狀態。下面我結合我的一些實驗,簡單介紹下myeclipse的,clean,build,run,以及他們和maven clean,maven build的區別。
一.myeclipse的clean,build和run
首先,我們使用一個普通的maven工程作為例子。
- clean。作用很簡單,清空輸出目錄下的所有文件,每一個source folder都有一個自己的輸出目錄,也就是output
folder。這個目錄可以在build path里進行設置,一個標準maven工程中,src/main/java通常的輸出目錄是工程名/target/classes
- build。build的作用則是編譯,實際上就是把source fold下的所有文件轉移到相應的output folder, .java文件先編譯再轉移,其他文件直接轉移。在maven工程中,這個build其實相當于一次myeclipse自身的編譯,最后再利用maven提取一下資源文件。
- 其實兩者區別很明顯了,很多時候我們分不清他和clean的區別,是因為myeclipse提供了很多便利的機制。clean的提示框如下:
看到紅框了嗎,如果打勾,表示clean完畢之后立刻進行一次build,那看起來就和build沒什么區別了。如果你把勾去掉,clean后去查看輸出目錄,就會發現輸出目錄被清空了。這里就不進行截圖了。
4.run。簡單來說就是找一個main方法,直接右鍵,run java application,相信大家都用過。這個run,實際上就是去工程名/target/classes
這個目錄下去找class文件執行而已(如果不是maven工程,可能去工程名/classes下找),那么沒有文件怎么辦呢?如果你剛剛完成了clean,但是沒有build,那么它會自動build一次。此外都會直接去找文件執行,如果找不到咋辦?
錯誤: 找不到或無法加載主類
二.maven的clean和build
- maven clean
默認情況下直接刪除target文件夾。簡單直接。 - maven build
按照maven規則進行編譯,和myeclipse無關,也就是說,不管你是不是設置了source folder,maven都按照他那一套進行編譯,具體規則大家可以找maven文章深入學習。 - maven的一些規則。maven的默認輸出文件夾也是
工程名/target/classes
,無論源代碼還是資源文件,根目錄都是這個文件夾,打包其實就相當于把這個文件夾打包而已。
三.總結
無論如何,build之前都應該clean,因為如果直接build,同名文件直接覆蓋,非同名文件會保留,這有可能給程序帶來未知的問題。如果myeclipse的輸出文件夾設置合理,那么和maven build可能也不會出現什么不同。但是,在使用maven的情況下,直接使用myeclipse內置的build功能仍然可能會和maven build產生不完全一致的效果,比如maven可能會忽視src/main/java文件夾內的資源文件,而myeclipse會保留。
嚴格來說,myeclipse內置的編譯功能,更多的是提供代碼提示和檢查功能,即使你完全不使用它,maven也可以正確編譯。(當然這樣你就享受不到代碼提示之類的的了)。
但可以確定的是,使用maven clean build總是可以生成最精確的結果,所以推薦先maven clean build后再運行程序。