基於 Maven 的多模塊 Java(Spring)項目構建

參看代碼 GitHub:

solution/pom.xml

pojo/pom.xml

mapper/pom.xml

common/pom.xml

service/pom.xml

console/pom.xml

web/pom.xml

webapi/pom.xml

webservice/pom.xml

一、Intelij IDEA 中構建 maven 項目及模塊

1.新建 maven 項目,在IDE中的菜單位置

基於 Maven 的多模塊 Java(Spring)項目構建

基於 Maven 的多模塊 Java(Spring)項目構建

2.項目中新建模塊在IDE中的菜單位置

基於 Maven 的多模塊 Java(Spring)項目構建

3.整個項目的結構

基於 Maven 的多模塊 Java(Spring)項目構建

二、Maven 模塊及模塊關係要點講解

1.solution/pom.xml

< groupId>lm.solution groupId>

< artifactId>solution artifactId>

< version>1.0-SNAPSHOT version>

講解:

groupId :模塊項目歸屬組織名稱

artifactId:項目內模塊名稱

version:模塊的版本號

這三個屬性唯一的標識了一個模塊,也被稱為 maven 座標。

< modules>

< module>webapi module>

... ...

modules>

講解:

因為 solution 這個模塊是做為項目父模塊存在的,在 modules 標籤內就指明瞭該模塊都包含哪些子模塊:

webapi、web、common、service、mapper、pojo、console、webservice。

< packaging>pom packaging>

講解:

因為 solution 模塊將包含多個子模塊,所以這裡的打包方式選擇 pom 值。

< properties>

< spring.version>4.3.13.RELEASE spring.version>

... ...

properties>

講解:

在父模塊中定義的 properties maven 屬性變量,除了在本模塊中可直接引用外,在所有的子模塊中也可以直接被引用,

也就是說在子模塊中就可以不必在重新定義 maven的屬性變量了,如 spring.version 這個屬性變量,在所有模塊及子模塊中

可以被直接使用 ${spring.version} 。

< dependencies>

< dependency>

< groupId>junit groupId>

< artifactId>junit artifactId>

... ...

dependency>

... ...

dependencies>

講解:

在父模塊中定義的類庫依賴,除了在父模塊中會做引用以外,在所有子模塊中也都會做自動的引用,

所以在子模塊中就不必添加 dependencies 中的依賴了,如 junit 這個第三方類庫,在子模塊中 maven

會自動繼承父模塊的 junit 依賴,子模塊中就不必再添加 junit 的類庫依賴了。

< dependencyManagement>

< dependencies>

< dependency>

< groupId>org.mybatis groupId>

< artifactId>mybatis artifactId>

< version> ${mybatis.version} version>

dependency>

... ...

dependencies>

dependencyManagement>

講解:

有的類庫依賴,在部分子模塊中需要,在部分子模塊中不需要,此時,就可將依賴關係放到此節點中,

例如:mybatis 這個第三方 orm 庫,在 pojo(僅是映射關係的實體層) 子模塊中沒有依賴,而在 mapper(orm 存儲倉層) 這個

子模塊中就是關鍵依賴。

< build>

< plugins>

< plugin>

< groupId>org.apache.maven.plugins groupId>

< artifactId>maven-compiler-plugin artifactId>

... ...

plugin>

plugins>

< pluginManagement>

< plugins>

< plugin>

< groupId>org.apache.tomcat.maven groupId>

< artifactId>tomcat8-maven-plugin artifactId>

... ...

plugin>

plugins>

pluginManagement>

build>

講解:

這裡 plugins 與 pluginManagement 可參看上面講解到的 dependencies 與 dependencyManagement 的作用,他們作用

類似,因為每個模塊都需要 maven-compiler-plugin 編譯插件,所以直接將其放到父模塊的 plugins 標籤內,而 tomcat8-maven-plugin

插件只有 web 子模塊需要,所以將其放到 pluginManagement 標籤中。

solution/pom.xml

 1  3 4.0.0 4 5 lm.solution 6 solution 7 1.0-SNAPSHOT 8  9 webapi10 web11 common12 service13 mapper14 pojo15 console16 webservice17 18 pom1920 solution21 http://maven.apache.org2223 24 25 UTF-826 27 4.3.13.RELEASE28 29 1.7.730 1.2.1731 32 2.9.433  
34 4.1235 36 1.8.1337 38 3.139 40 3.4.541 42 1.3.143 44 5.1.3445 46 1.0.547 48 3.0.149 50 2.251 52 1.253 54 2.155 56 1.9.1357 58 1.6.159 60 2.6.961 62 2.0.463 64 1.3.165 66 2.4
67 68 1.969 70 4.071 72 1.7.073 74 2.3.1975 76 3.977 78 4.4.879 4.5.480 81 2.3.082 83 2.9.084 85 5.1.286 87 1.2.4688 89 1.090
9192 93 94 95 junit96 junit97 RELEASE98 99
test100
101 102 103 org.springframework104 spring-test105 ${spring.version}106 test107 108 109 110 org.springframework111 112 spring-context113 ${spring.version}114 115 116 org.springframework117 spring-context-support118 ${spring.version}119 120 121 org.springframework122 spring-aspects123 ${spring.version}124 125 126 org.springframework127 spring-tx128 ${spring.version}129 130 131
org.springframework132 spring-jdbc133 ${spring.version}134
135 136 137 org.aspectj138 aspectjrt139 ${aspectj.version}140 141 142 org.aspectj143 aspectjweaver144 ${aspectj.version}145 146 147 148 com.fasterxml.jackson.core149 jackson-annotations150 ${jackson.version}151 152 153 com.fasterxml.jackson.core154 jackson-databind155 ${jackson.version}156 157 158 com.fasterxml.jackson.core159 jackson-core160 ${jackson.version}161 162 163
com.fasterxml.jackson.dataformat164 jackson-dataformat-xml165 ${jackson.version}166
167 168 169 log4j170 log4j171 ${log4j.version}172 173 174 org.slf4j175 slf4j-api176 ${slf4j.version}177 178 179 org.slf4j180 slf4j-log4j12181 ${slf4j.version}182 183
184185 186 187 188 189 org.springframework190 spring-web191 ${spring.version}192 193 194 org.springframework195 spring-webmvc196 ${spring.version}
197
198 199 200 cglib201 cglib202 ${cglib.version}203 204 205 206 org.mybatis207 mybatis208 ${mybatis.version}209 210 211 org.mybatis212 mybatis-spring213 ${mybatisSpring.version}214 215 216 217 mysql218 mysql-connector-java219 ${mysql.version}220 221 222 223 com.alibaba224 druid225 ${druid.version}226 227 228 229
230 javax.servlet231 javax.servlet-api232 ${javaxServlet.version}233 provided234 235 236 javax.servlet.jsp237 jsp-api238 ${jspApi.version}239 provided240 241 242 javax.servlet243 jstl244 ${jstl.version}245 246 247 248 net.sf.json-lib249 json-lib250 ${jsonLib.version}251 jdk15252 253 254 255 org.codehaus.jackson256 jackson-core-asl257 ${jacksonOld.version}258 259 260 org.codehaus.jackson
261 jackson-mapper-asl262 ${jacksonOld.version}263
264 265 266 dom4j267 dom4j268 ${dom4j.version}269 270 271 272 net.sf.ehcache273 ehcache-core274 ${ehcacheCore.version}275 276 277 net.sf.ehcache278 ehcache-web279 ${ehcacheWeb.version}280 281 282 283 commons-fileupload284 commons-fileupload285 ${commonsFileupload.version}286 287 288 commons-io289 commons-io290 ${commonsIo.version}291 292
293 commons-codec294 commons-codec295 ${commonsCodec.version}296 297 298 org.apache.commons299 commons-collections4300 ${commonsCollections4.version}301 302 303 org.apache.commons304 commons-lang3305 3.3.2306 307 308 309 commons-beanutils310 commons-beanutils311 ${commonsBeanutils.version}312 313 314 commons-logging315 commons-logging316 317 318 319 320 321 org.freemarker322 freemarker323 ${freemarker.version}324 325
326 327 org.apache.poi328 poi329 ${poi.version}330 331 332 org.apache.poi333 poi-ooxml334 ${poi.version}335 336 337 338 org.apache.httpcomponents339 httpcore340 ${httpcore.version}341 342 343 org.apache.httpcomponents344 httpclient345 ${httpclient.version}346 347 348 349 com.sun.xml.ws350 jaxws-rt351 ${jaxwsRt.version}352 353 354 355 redis.clients356 jedis357 ${jedis.version}
358
359 360 361 com.rabbitmq362 amqp-client363 ${amqpClient.version}364 365 366 367 com.alibaba368 fastjson369 ${fastjson.version}370 371 372 373 javax.annotation374 jsr250-api375 ${jsr250.version}376 377
378
379380 381 382 383 384 org.apache.maven.plugins385 maven-compiler-plugin386 3.2387 388 1.8389 1.8390 UTF-8391 392 393
394395 396 397 398 399 org.apache.tomcat.maven400 tomcat8-maven-plugin401 3.0-r1756463402 403 404 405
406407

2.pojo/pom.xml

這個模塊是做為實體層的。

重複內容不在講解,參考上文的說明。

< parent>

< artifactId>solution artifactId>

< groupId>lm.solution groupId>

... ...

parent>

講解:

因為 pojo 模塊是 solution 模塊的子模塊,所以要在 parent 標籤內指明父模塊是 solution 模塊的座標。

< packaging>jar packaging>

講解:

因為這裡 pojo 模塊是做為其它模塊依賴的類庫使用的,所以打包方式為 jar 值。

pojo/pom.xml

1 3 4 solution5 lm.solution6 1.0-SNAPSHOT7 8 4.0.0910 lm.solution11 pojo12 1.0-SNAPSHOT13 jar1415 pojo16 http://maven.apache.org1718 19 UTF-820 2122 23 2425 2627 28 

3.mapper/pom.xml

這個模塊是做為存儲倉層的。

重複內容不在講解,參考上文的說明。

< dependencies>

< dependency>

< groupId>lm.solution groupId>

< artifactId>pojo artifactId>

< version>1.0-SNAPSHOT version>

dependency>

... ...

< dependency>

< groupId>org.mybatis groupId>

< artifactId>mybatis artifactId>

dependency>

... ...

dependencies>

講解:

因為 mapper 模塊依賴 pojo 模塊,所以這裡引入 pojo 的依賴座標,

又由於該模塊需要第三方mybatis類庫,所以 這裡引入mybatis 的 maven 座標,

上文中 solution 父模塊 已經在 dependencyManagement 指明瞭,所以這裡就不用再指明 version 了。

mapper/pom.xml

1 3 4 solution5 lm.solution6 1.0-SNAPSHOT7 8 4.0.0 
910 lm.solution11 mapper12 1.0-SNAPSHOT13 jar1415 mapper16 http://maven.apache.org1718 19 UTF-820 2122 23 24 25 lm.solution26 pojo27 1.0-SNAPSHOT28 2930 31 32 org.mybatis33 mybatis34 35 36 mysql37 mysql-connector-java38 39 40 com.alibaba41 druid42 runtime43
44
45

4.common/pom.xml

這個模塊是做為公共類庫模塊的。

重複內容不在講解,參考上文的說明。

1 3 4 solution5 lm.solution6 1.0-SNAPSHOT7 8 4.0.0910 lm.solution11 common12 1.0-SNAPSHOT13 jar1415 common16 http://maven.apache.org1718 19 20 21 lm.solution22 pojo23 1.0-SNAPSHOT24 2526 27 28 29  
org.springframework30 spring-webmvc31
32 33 34 org.apache.poi35 poi36 37 38 39 org.apache.poi40 poi-ooxml41 42 43 44 javax.servlet45 javax.servlet-api46 provided47 48 49 50 org.apache.httpcomponents51 httpcore52 53 54 org.apache.httpcomponents55 httpclient56 57 58 59 org.apache.commons60 commons-collections461 62 63 64
redis.clients65 jedis66
67 68 69 com.rabbitmq70 amqp-client71 72
73

5.service/pom.xml

這個模塊是做為服務類庫模塊的。

重複內容不在講解,參考上文的說明。

1 3 4 solution5 lm.solution6 1.0-SNAPSHOT7 8 4.0.0910 lm.solution11 service12 1.0-SNAPSHOT13 jar1415 service16 http://maven.apache.org1718 19 UTF-8 
20
2122 23 24 25 lm.solution26 mapper27 1.0-SNAPSHOT28 2930 3132 33

6.console/pom.xml

這個模塊是做為各種測試用的模塊。

重複內容不在講解,參考上文的說明。

1 3 4 solution5 lm.solution6 1.0-SNAPSHOT7 8 4.0.0910 lm.solution11 console12 1.0-SNAPSHOT13 jar1415 console16 http://maven.apache.org1718 19  
UTF-820
2122 23 24 25 lm.solution26 pojo27 1.0-SNAPSHOT28 29 30 lm.solution31 common32 1.0-SNAPSHOT33 34 35 lm.solution36 service37 1.0-SNAPSHOT38 3940 41 42 43 org.codehaus.jackson44 jackson-core-asl45 46 47 org.codehaus.jackson48 jackson-mapper-asl49 50 51 com.rabbitmq52 amqp-client53 54 55
56 com.alibaba57 fastjson58 59 60 61 commons-io62 commons-io63 64 65 66 javax.annotation67 jsr250-api68 69 70 71 javax.servlet72 javax.servlet-api73 7475 76 77 junit78 junit79 RELEASE80 81 82 org.springframework83 spring-test84 4.3.13.RELEASE85 86
878889

7.web/pom.xml

這個模塊是做為 web 站點的。

重複內容不在講解,參考上文的說明。

< packaging>war packaging>

講解:

因為這模塊在編譯後是部署到 tomcat 容器的,所以這裡採用的打包方式是 war 值。

web/pom.xml

1 3 4 solution5 lm.solution6 1.0-SNAPSHOT7 8 4.0.09 lm.solution10 web11 war12 1.0-SNAPSHOT13 web Maven Webapp14 http://maven.apache.org15 16 17 18 lm.solution19 service20 1.0-SNAPSHOT21 22  
23 lm.solution24 common25 1.0-SNAPSHOT26 2728 29 30 31 org.springframework32 33 spring-webmvc34 35 36 37 cglib38 cglib39 40 41 42 org.mybatis43 mybatis44 45 46 47 org.mybatis48 mybatis-spring49 50 51 52 mysql53 mysql-connector-java54 55 56 57
com.alibaba58 druid59 60
61 62 63 javax.servlet64 javax.servlet-api65 provided66 67 68 javax.servlet.jsp69 jsp-api70 provided71 72 73 javax.servlet74 jstl75 76 77 78 net.sf.json-lib79 json-lib80 jdk1581 82 83 84 dom4j85 dom4j86 87 88 89 net.sf.ehcache
90 ehcache-core91
92 93 net.sf.ehcache94 ehcache-web95 96 97 98 commons-fileupload99 commons-fileupload100 101 102 commons-io103 commons-io104 105 106 107 commons-codec108 commons-codec109 110 111 org.apache.commons112 commons-collections4113 114 115 org.apache.commons116 commons-lang3117 118 119 120 commons-beanutils121 commons-beanutils122 123 124
commons-logging125 commons-logging126
127
128
129 130 131 org.freemarker132 freemarker133 134 135 136 org.apache.httpcomponents137 httpcore138 139 140 org.apache.httpcomponents141 httpclient142 143 144 145 redis.clients146 jedis147 148 149 150 com.rabbitmq151 amqp-client152 153 154 155 com.alibaba156 fastjson157 158
159 160
web161162 163 164 org.apache.tomcat.maven165 tomcat8-maven-plugin166 167 168
169

8.webapi/pom.xml

這個模塊是做為 Restful API 站點的。

重複內容不在講解,參考上文的說明。

1 34 5 solution6 lm.solution7 1.0-SNAPSHOT8 910 4.0.011 lm.solution12 webapi13 war14 1.0-SNAPSHOT15 webapi Maven Webapp16 http://maven.apache.org1718 19 20 21 lm.solution22  
service23 1.0-SNAPSHOT24
25 26 lm.solution27 common28 1.0-SNAPSHOT29 3031 32 33 cglib34 cglib35 3637 38 39 org.mybatis40 mybatis-spring41 42 43 javax.servlet44 javax.servlet-api45 provided46 47 48 javax.servlet.jsp49 jsp-api50 provided51 52 53 javax.servlet54 jstl55 56 57
58 net.sf.json-lib59 json-lib60 jdk1561 62 63 64 dom4j65 dom4j66 67 68 69 net.sf.ehcache70 ehcache-core71 72 73 net.sf.ehcache74 ehcache-web75 76 77 78 commons-fileupload79 commons-fileupload80 81 82 commons-io83 commons-io84 85 86 commons-codec87 commons-codec88 89 90 org.apache.commons
91 commons-collections492
93 94 org.apache.commons95 commons-lang396 97 98 99 commons-beanutils100 commons-beanutils101 102 103 commons-logging104 commons-logging105 106 107 108 109 110 org.freemarker111 freemarker112 113114
115116 117 webapi118119 120 121 org.apache.tomcat.maven122 tomcat8-maven-plugin123 124 125 126

9.webservice/pom.xml

這個模塊是做為 JAX-WS 服務站點的。

重複內容不在講解,參考上文的說明。

1 3 4 solution5 lm.solution6 1.0-SNAPSHOT7 8 4.0.0910 lm.solution11 webservice12 1.0-SNAPSHOT13 war1415 webservice Maven Webapp16 http://maven.apache.org1718 19 20 21 lm.solution22 service23 1.0-SNAPSHOT24 2526 27 28 com.sun.xml.ws29 jaxws-rt30 31 3233 34 webservice35 36  


分享到:


相關文章: