多模塊開發的好處:web
以前沒怎麼接觸過寫多個模塊,大部分時間都是一股腦打包在一個jar裏面,但隨之帶來的問題也是顯而易見的,假設DAO層有一個部分須要修改,可是最後卻須要打包整個項目,apache
這樣其實作了不少無心義的工做,那麼若是把DAO層單獨分離出來,單獨打包爲jar,提高開發效率。除此以外,就像把DAO,Service,表現層分開的目的同樣,分紅不一樣的模塊tomcat
來實現解耦,各個模塊負責本身的功能,而且也可使用其餘項目中。最後,多個模塊也跟利於分工,每一個團隊負責不一樣的模塊,提升效率。服務器
IDEA建立多模塊工程:app
與Eclipse不一樣的是,IDEA中沒有workplace這個概念,在IDEA中只有project和module,project是項目中的最頂級的單元,其次就是module,也就是一個project包含多個module。webapp
project和各個module的關係能夠這樣表示:maven
parent是父工程,全部的子模塊都須要依賴它,再往下,將項目劃分爲工具類,DAO和service以及表現層(web),每個模塊都包含一個本身的pom文件,來規定本身的打包方式以及其餘依賴。工具
website-parent--pom.xml (pom)
|
|
|-- website-util
| |-- pom.xml (jar)
|
|-- website-dao
| |-- pom.xml (jar)
|
|-- website-service
| |-- pom.xml (war)
|
|-- website-web
|-- pom.xml (war)
第一步就是建立一個工程了,至因而建空工程與否依狀況而定,以建空工程爲例,名appui
----》
編碼
以後就是新建一個父模塊,能夠採用maven的骨架來構建,選擇quickstart,暫且命名parent,以後一直next
----》
父模塊沒大改動,在pom文件添加打包方式爲pom。
<packaging>pom</packaging>
以後根據本身的項目結構,繼續構建module,若是該部分沒有特殊的功能,好比表現層須要webapp目錄,建立的時候跳過骨架選擇便可,
若是有特殊功能可根據骨架建立。固然,若是不肯定直接跳過骨架便可,骨架就是一個搭好的模型罷了,在沒有骨架的模塊上也能夠本身建立相應的目錄結構來實現功能。
重點是把各個的模塊的pom文件的依賴和打包方式處理好,這對以後啓動有着很重要的做用。
建立好的項目如圖:
tomcat插件啓動:
在須要啓動的模塊的pom文件添加依賴:
<!-- 配置Tomcat插件 --> <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <version>2.2</version> <configuration> <path>/</path> <port>8081</port> <server>tomcat7</server> <uriEncoding>UTF-8</uriEncoding> </configuration> </plugin>
參數解釋:
path:訪問的路徑
port:啓動的端口
server:服務器名稱
uriEncoding:字符編碼
這裏我在Service和Web層都用了這個插件,可是單憑這個插件是沒法啓動的,由於是多模塊的項目,並且Service和Web層都依賴於某些層,因此必須先將其餘
模塊打包好,才能正常啓動。
打包的正確順序是,父->子
以上圖爲例,先parent再common,再到manager,這些進行後才實現了dao,interface這些層的打包,以後的Service和web依賴於它們,才能正常啓動。
IDEA對maven提供了很好的支持,找到Maven Project選項,能夠看到以下
這裏其實是表明了模塊的一個生命週期,因此要使得其餘maven模塊也能依賴它們,只需將它們安裝到本地maven庫中就行。
點擊install,再查看本地的maven庫:
能夠看到本地倉庫中已經有了相應的jar包
這些工做完成以後就是啓動了,這裏我將Service設在8080,將web設在8081
而後配置好名字和須要其餘配置
在command line行寫上tomcat7:run (若是後面的7是指tomcat的版本。)
apply以後回到頁面點擊運行符號。
Service啓動:
Web一樣的方法啓動: