關於eclipse中MAVEN WEB工程中編譯問題


這幾天是被java的環境搞瘋了,我先是搭了一個spring+springmvc+mybatis的工程,在家里跑了一下,沒有問題,把工程帶到公司里用,卻一直不能使用。

按常理來說,只要工程發生一點變化,tomcat都會自動重啟,自動重新reload。但是我發現我在公司無論怎么改,tomcat沒有一點變化,都是之前的工程狀態。

原因是因為之前,我把Build Automaticlly給去掉了。導致了eclipse不能及時的把編譯文件build到指定目錄中去。

勾上了就能同步上去了。

 


 

后來,我想了一下,它是怎么樣同步,根據什么來同步的呢?

選中工程右鍵選擇properties,找到

 

Deployment Assembly(部署裝配),這里是真正的部署到tomcat的工程。還有一個目錄java Build Path

 

這里有一個output folder文件選項,這里下面的目錄也是動態編譯的。但是這個classes文件夾在工程中是隱藏的。

在Deployment Assembly 和build Path中的輸出文件夾中classes目錄是同步 ,但是tomcat實際實際裝載的是Deployment Assembly 下面的文件。

打開一個文件夾就可以證明這個問題:\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp1\wtpwebapps\datag\WEB-INF\classes\

這個目錄是tomcat實際裝載WEB項目的目錄。正好與Deployment Assembly的目錄對等。

 

但是后來我奇葩地發現target下面也有一個datag\WEB-INF\classes\目錄,天真的我以為tomcat裝載的是它,然而,當我對一個類文件作了修改之后,我發現target下面的個datag\WEB-INF\classes\下的對應的class文件的時間並沒有改變,這說明雖然文件已經編譯build但是並沒有build到這個目錄。然而我發現target\classes和\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp1\wtpwebapps\datag\WEB-INF\classes\下對應的class文件的修改時間改變了。

 

現在問題很明朗了,當勾上Build Automaticlly,當類文件發生一點變化,eclipse都會動態編譯,然后build到Deployment Assembly和build Path下設置的輸出目錄,我這里對應的是\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp1\wtpwebapps\datag\WEB-INF\classes\和target\classes,而tomcat最終執行的是Deployment Assembly下的目錄,緊接着,tomcat就會自動reload工程。

 

 


 

 

 

這里還有一個小小的問題target \datag\WEB-INF\classes的目錄是哪里來的呢,而且還不會動態更新?

 

其實這個是maven的產物,我勒個去,你執行maven install就知道了,(我的工程的名字叫datag)

這句話是在控制台輸出的。

target \datag\WEB-INF\classes是maven的產物,當然是不會動態更新了,只要當執行maven重新打包的命令的時候,里面的工程才能更新過來。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM