天天看點

maven多子產品項目,多web合并項目使用心得

Fixflow,做中國最好的開源流程引擎!項目位址https://github.com/fixteam/fixflow

       此文章适合maven初學者或想接觸maven的使用者,講的隻是皮毛,高手請自覺略過。

       最近一直在搞fixflow5.2的更新工作,以前隻知道maven好用,但是一直沒機會接觸,這次由于工作需要,終于有空看下maven了。

       由于以前項目使用linksource來管理項目結構,用tomcat來調試,習慣了,是以雖然決定用maven,但是還是習慣用tomcat來調試。是以就一直在網上搜maven tomcat  多web,發現都是一些轉載的文章,而且都需要這插件,那插件的,感覺新手無從下手,不過幾天研究下來,覺得其實網上的方案都不是我想要的,其實有更簡單的,下面我就來簡單說下fixflow用maven來建構多web的過程。

       關于fixflow的maven結構介紹,可以參考我的另一篇部落格http://yang-ch.iteye.com/blog/2032905,這也是我們這篇文章的目标。

      這篇文章,我準備分3個部分來介紹:

  1. maven多子產品項目。
  2. maven多web合并項目。
  3. maven多web合并項目在eclipse+tomcat環境下部署和調試。

      maven多子產品項目

        maven多子產品項目需要一個父工程來聚合各個子子產品,不過其實就是需要一個父pom.xml,主要作用是聲明子子產品,代碼如下:

<modules>
	<module>modules/fixflow-core</module>
	<module>modules/fixflow-expand</module>
	<module>modules/fixflow-common-api</module>
	<module>modules/fixflow-common-servlet</module>
	<module>modules/fixflow-manage-servlet</module>
	<module>modules/fixflow-webapp-common</module>
	<module>modules/fixflow-webapp-taskcenter</module>
	<module>modules/fixflow-webapp-managecenter</module>
	<module>modules/fixflow-webapp-explorer</module>
	<module>modules/fixflow-converter</module>
	<module>modules/fixflow-webapp-editor</module>
</modules>      

      然後在子子產品中,聲明父工程,子子產品中代碼如下:

<parent>
    <groupId>com.founder.fix.fixflow</groupId>
    <artifactId>fixflow-root</artifactId>
    <version>5.0</version>
    <relativePath>../..</relativePath>
</parent>      

       關于多子產品的文章,網上有很多,也都很詳細,這裡不再多說。

       maven多web合并項目

        多web項目合并,主要是我在網上找到的資料都不是我最終想要的效果,是以這裡就介紹下我最終使用的方案,網上有很多方案都是介紹用caro插件,我到現在也不明白為什麼要使用這個插件。

        maven的多web子產品maven-war-plugin插件的overlays屬性來處理,最終主web項目pom.xml代碼如下

<build>  
        <finalName>bpmcenter</finalName>  
        <plugins>  
            <!-- 合并多個war -->  
            <plugin>  
                <groupId>org.apache.maven.plugins</groupId>  
                <artifactId>maven-war-plugin</artifactId>  
                <configuration>  
                    <packagingExcludes>WEB-INF/web.xml</packagingExcludes>    
                    <overlays>  
                        <overlay>  
                            <groupId>com.founder.fix.fixflow</groupId>  
                            <artifactId>fixflow-webapp-taskcenter</artifactId>  
                        </overlay>   
                    </overlays>  
                </configuration>  
            </plugin>  
        </plugins> 
</build>       

    這裡使用到了maven-war-plugin,用overlay屬性已經足夠将多web合并了,隻是用的過程中需要注意以下幾點:

  1. 被合并的子web項目packaging屬性必須是war
  2. 被合并的子web項目,必須在主項目中添加依賴關系。
  3. 被合并的子web項目中,如果沒有web.xml,則需要在pom.xml中聲明
    <build>
        <finalName>fixflow-webapp-editor</finalName>
            <plugins>  
                <plugin>  
                    <groupId>org.apache.maven.plugins</groupId>  
                    <artifactId>maven-war-plugin</artifactId>  
                    <configuration>  
                        <failOnMissingWebXml>false</failOnMissingWebXml>  
                    </configuration>  
                </plugin>     
            </plugins>  
    </build>      

        做完以上幾點,多web項目合并就基本上做完了,運作mvn install就會發現打出的war包中已經存在了其他子子產品的項目。

       多web項目在eclipse+tomcat環境下部署調試

        在eclipse裡面使用,其實更簡單,隻是網上的說法太複雜了而已,對于習慣了tomcat開發的使用者來說。

        對于maven項目,一個環境到另一個環境應該隻有pom.xml檔案和src檔案夾就夠了,其他都是使用者根據自己的環境來做的。

  1. 打開eclipse,修改本地maven倉庫位址,導入maven項目,等待建構結束。
  2. 建立server,打開window-prefrences-server-runTime Environment-new ....選擇tomcat路徑,jdk資訊,這一步和原來完全一樣。
  3. 打開server視圖,new server,這裡選中剛才建立的tomcat,點選next,這步隻需要主web項目添加進來即可。
  4. 輕按兩下建立的server,選擇将項目釋出到tomcat的webapps目錄下,點選pushlish,完成。

       再去tomcat目錄,發現已經将合并後的web釋出到對應目錄下了。引用的其他Java項目已經被打包成jar釋出到lib下了,不過你可以打個斷點試試,依然可以調試,修改一段代碼,發現熱部署也是可以的,這樣就和原來的開發習慣完全一樣了。

        細心的使用者會發現,其實這完全和我們原來的建構,部署方式完全一樣,是的,maven沒有那麼複雜,m2eclipse maven plugin已經幫我們做好了太多的事情,maven隻會讓我們項目之間的遷移更友善,更簡潔,這也是我喜歡上maven的重要原因。

        我是一個絕對的maven新手,上面的文章用的也隻是maven的皮毛而已,maven更多的建構功能還需要深入去研究,上面文章隻是想告訴那些想嘗試maven的新手,其實maven不但對代碼管理帶來了很大的友善,而且完全可以不改變我們原有的開發習慣。是以,盡情的擁抱maven吧!