更改maven打包檔案的預設輸出
眾所周知,maven是個專案管理工具,maven是個好東西啊,這裡就不多介紹了,網上有很多!這裡我主要是講一下在使用maven之後的一些心得。
開發j2ee Web專案的同學,在開發階段總免不了需要執行web伺服器來除錯專案。一般都喜歡在應用伺服器的配置檔案中設定虛擬目錄,直接知道web專案所在的目錄;這樣可以省去打包、再發布到伺服器的步驟!
大家知道,在進行j2ee專案開發中,除錯的時候如果只是修改了頁面是不需要重啟應用伺服器的。
一、沒有用maven管理時
在Eclipse中開發j2ee專案,所有的jsp檔案都是放在WebRoot目錄下面,使用者需要把所有用到的jar包放到WEB-INF(WebRoot的子目錄)目錄下的lib目錄下(這就是沒有用maven管理的缺點,所有jar都要自己去找);Eclipse編譯時,會把java原始碼產生的class檔案放到WEB-INF目錄的classes目錄下。所以大家在應用伺服器中指定虛擬目錄時,直接指定到這個WebRoot目錄就行了,這樣在除錯過程中,如果只修改了jsp檔案,則不需要重啟伺服器,重新整理頁面,就可以看到修改後的效果。
二、在用maven管理j2ee專案時
當然首先需要安裝maven。這時就建立j2ee專案,就不是直接用Eclipse建立了,所以也就不會產生WebRoot目錄了。當然,你也可以直接用Eclipse建立,然後手動去建立適應於maven的目錄的結果和檔案(這樣的話難免覺得彆扭,既然maven提供了相應的命令,我們為什麼不直接使用呢)!
以下是我做的一個例子(假設此例子中的專案所在的目錄是D:/EclipseWorkspace):
首先執行命令建立一個j2ee web專案:mvn archetype:create -DgroupId=my.maven.test -DartifactId=testMaven -DarchetypeArtifactId=maven-archetype-webapp
專案建立完後,執行命令:mvn eclipse:eclipse 【生成eclipse的專案檔案,可以匯入到eclipse中】
然後此專案就成了一個eclipse專案,可以使用eclipse進行開發了。
匯入到eclipse中後,本人建立了幾個java類和一個叫abc的jsp頁面,如圖一:
圖一
其中target目錄是用來存放專案打包之後生成的檔案的目錄,圖一中顯示target目錄下並沒有檔案,是因為我還沒有用maven對專案進行打包。
執行打包命令:mvn clean package 【對專案進行打包】
執行此命令後,專案的結構如圖二:
圖二
發現圖二中target目錄下多出了幾個子目錄和檔案,這是因為執行命令mvn clean package後,生成的檔案預設會放在target目錄下。
其中testMaven.war檔案可以直接拷貝到應用伺服器的釋出目下,啟動伺服器可以直接執行!但在開發階段,相信不會有人這麼除錯web專案!
生成的子目錄testMaven也是一個完整的web應用,展開後如圖三:
圖三
所以對於maven管理的專案,指定web專案的虛擬目錄,在此例子中虛擬目錄應該是“D:/EclipseWorkspace/testMaven/target/testMaven”。但這樣的話,有一個缺點,那就是每次只要修改了專案中的檔案,即使是jsp檔案或者靜態頁面,你都要執行mvn clean package命令重新打包;要不然你的修改就不會更新到target目錄下的檔案中去!這樣的話感覺比較麻煩,萬一忘了執行此命令就重新整理頁面,發現沒有看到修改後效果,找問題都不好找!因為maven遵循“約定優先於配置”的思想。所以一般所有的頁面都是放在目錄webapp下面的,就我這例子而言也是如此!圖二和圖三都是執行了mvn clean package命令之後的專案的目錄結構,從中可以發現在webapp的子目錄WEB-INF下面除了頁面的原始檔,並沒有classes目錄和lib目錄!要是有的話,那直接把虛擬目錄制定到此webapp目下即“D:/EclipseWorkspace/testMaven/src/main/webapp”那該多好,就不用每次修改了頁面都需要執行命令mvn clean package之後才能看到效果!
對於這個問題是可以解決的,由於maven遵循“約定優先於配置”的思想,所以如果不做特殊配置,它預設是把打包之後產生的檔案都放在target目錄下的。要想改變此預設行為,我們修改在專案中的pom.xml檔案。在此專案中,新增如下配置:
<build>
<plugins>
<!-- 更改maven預設的打包目錄 -->
<plugin>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<webappDirectory>${basedir}/src/main/webapp</webappDirectory>
<warSourceDirectory>${basedir}/src/main/webapp</warSourceDirectory>
</configuration>
</plugin>
</plugins>
</build>
修改之後執行打包命令mvn clean package,專案的目錄結構圖如圖四:
圖四
從圖四可以看到,webapp的子目錄WEB-INF下面多出了classes和lib目錄。這樣的話,如果你只修改了頁面,就不需要再執行mvn clean package命令對專案進行打包了(因為頁面的原始檔都在webapp目下的),直接享受修改頁面即可重新整理頁面的快捷了(但是如果修改的是java檔案,則還是需要執行mvn clean package命令重新打包的;同理每次修改了pom.xml檔案也是一樣,這點還是要注意)!