1. 程式人生 > >更改maven打包檔案的預設輸出

更改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檔案也是一樣,這點還是要注意)!