參看代碼 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中的菜單位置
2.項目中新建模塊在IDE中的菜單位置
3.整個項目的結構
二、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
13 4.0.0 4 5lm.solution 6solution 71.0-SNAPSHOT 89 18webapi 10web 11common 12service 13mapper 14pojo 15console 16webservice 17pom 1920solution 21http://maven.apache.org 222324 25 9192UTF-8 26 274.3.13.RELEASE 28 291.7.7 301.2.17 31 322.9.4 33 344.12 35 361.8.13 37 383.1 39 403.4.5 41 421.3.1 43 445.1.34 45 461.0.5 47 483.0.1 49 502.2 51 521.2 53 542.1 55 561.9.13 57 581.6.1 59 602.6.9 61 622.0.4 63 641.3.1 65 662.4 67 681.9 69 704.0 71 721.7.0 73 742.3.19 75 763.9 77 784.4.8 794.5.4 80 812.3.0 82 832.9.0 84 855.1.2 86 871.2.46 88 891.0 9093 94 18418595 101 102junit 96junit 97RELEASE 98 99test 100103 108 109org.springframework 104spring-test 105${spring.version} 106test 107110 115org.springframework 111 112spring-context 113${spring.version} 114116 120org.springframework 117spring-context-support 118${spring.version} 119121 125org.springframework 122spring-aspects 123${spring.version} 124126 130org.springframework 127spring-tx 128${spring.version} 129131 135 136org.springframework 132spring-jdbc 133${spring.version} 134137 141org.aspectj 138aspectjrt 139${aspectj.version} 140142 146 147org.aspectj 143aspectjweaver 144${aspectj.version} 145148 152com.fasterxml.jackson.core 149jackson-annotations 150${jackson.version} 151153 157com.fasterxml.jackson.core 154jackson-databind 155${jackson.version} 156158 162com.fasterxml.jackson.core 159jackson-core 160${jackson.version} 161163 167 168com.fasterxml.jackson.dataformat 164jackson-dataformat-xml 165${jackson.version} 166169 173log4j 170log4j 171${log4j.version} 172174 178org.slf4j 175slf4j-api 176${slf4j.version} 177179 183org.slf4j 180slf4j-log4j12 181${slf4j.version} 182186 379380187 188 378189 193org.springframework 190spring-web 191${spring.version} 192194 198 199org.springframework 195spring-webmvc 196${spring.version} 197200 204 205cglib 201cglib 202${cglib.version} 203206 210org.mybatis 207mybatis 208${mybatis.version} 209211 215 216org.mybatis 212mybatis-spring 213${mybatisSpring.version} 214217 221 222mysql 218mysql-connector-java 219${mysql.version} 220223 228 229com.alibaba 224druid 225${druid.version} 226 227230 235javax.servlet 231javax.servlet-api 232${javaxServlet.version} 233provided 234236 241javax.servlet.jsp 237jsp-api 238${jspApi.version} 239provided 240242 246 247javax.servlet 243jstl 244${jstl.version} 245248 253 254net.sf.json-lib 249json-lib 250${jsonLib.version} 251jdk15 252255 259org.codehaus.jackson 256jackson-core-asl 257${jacksonOld.version} 258260 264 265org.codehaus.jackson 261jackson-mapper-asl 262${jacksonOld.version} 263266 270 271dom4j 267dom4j 268${dom4j.version} 269272 276net.sf.ehcache 273ehcache-core 274${ehcacheCore.version} 275277 281 282net.sf.ehcache 278ehcache-web 279${ehcacheWeb.version} 280283 287commons-fileupload 284commons-fileupload 285${commonsFileupload.version} 286288 292commons-io 289commons-io 290${commonsIo.version} 291293 297commons-codec 294commons-codec 295${commonsCodec.version} 296298 302org.apache.commons 299commons-collections4 300${commonsCollections4.version} 301303 307 308org.apache.commons 304commons-lang3 3053.3.2 306309 319 320commons-beanutils 310commons-beanutils 311${commonsBeanutils.version} 312313 318314 317commons-logging 315commons-logging 316321 325 326org.freemarker 322freemarker 323${freemarker.version} 324327 331org.apache.poi 328poi 329${poi.version} 330332 336 337org.apache.poi 333poi-ooxml 334${poi.version} 335338 342org.apache.httpcomponents 339httpcore 340${httpcore.version} 341343 347 348org.apache.httpcomponents 344httpclient 345${httpclient.version} 346349 353 354com.sun.xml.ws 350jaxws-rt 351${jaxwsRt.version} 352355 359 360redis.clients 356jedis 357${jedis.version} 358361 365 366com.rabbitmq 362amqp-client 363${amqpClient.version} 364367 371 372com.alibaba 368fastjson 369${fastjson.version} 370373 377javax.annotation 374jsr250-api 375${jsr250.version} 376381 406407382 383 394395384 393org.apache.maven.plugins 385maven-compiler-plugin 3863.2 387388 389 3921.8 390UTF-8 391396 405397 398 404399 403org.apache.tomcat.maven 400tomcat8-maven-plugin 4013.0-r1756463 402
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
13 4 8solution 5lm.solution 61.0-SNAPSHOT 74.0.0 910lm.solution 11pojo 121.0-SNAPSHOT 13jar 1415pojo 16http://maven.apache.org 171819 2122UTF-8 2023 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
13 4 8solution 5lm.solution 61.0-SNAPSHOT 74.0.0 910lm.solution 11mapper 121.0-SNAPSHOT 13jar 1415mapper 16http://maven.apache.org 171819 2122UTF-8 2023 24 4525 2930 31lm.solution 26pojo 271.0-SNAPSHOT 2832 35org.mybatis 33mybatis 3436 39mysql 37mysql-connector-java 3840 44com.alibaba 41druid 42runtime 43
4.common/pom.xml
這個模塊是做為公共類庫模塊的。
重複內容不在講解,參考上文的說明。
13 4 8solution 5lm.solution 61.0-SNAPSHOT 74.0.0 910lm.solution 11common 121.0-SNAPSHOT 13jar 1415common 16http://maven.apache.org 171819 20 7321 2526 27 28lm.solution 22pojo 231.0-SNAPSHOT 2429 32 33org.springframework 30spring-webmvc 3134 37 38org.apache.poi 35poi 3639 42 43org.apache.poi 40poi-ooxml 4144 48 49javax.servlet 45javax.servlet-api 46provided 4750 53org.apache.httpcomponents 51httpcore 5254 57 58org.apache.httpcomponents 55httpclient 5659 62 63org.apache.commons 60commons-collections4 6164 67 68redis.clients 65jedis 6669 72com.rabbitmq 70amqp-client 71
5.service/pom.xml
這個模塊是做為服務類庫模塊的。
重複內容不在講解,參考上文的說明。
13 4 8solution 5lm.solution 61.0-SNAPSHOT 74.0.0 910lm.solution 11service 121.0-SNAPSHOT 13jar 1415service 16http://maven.apache.org 171819 2122UTF-8 2023 24 3325 2930 3132lm.solution 26mapper 271.0-SNAPSHOT 28
6.console/pom.xml
這個模塊是做為各種測試用的模塊。
重複內容不在講解,參考上文的說明。
13 4 8solution 5lm.solution 61.0-SNAPSHOT 74.0.0 910lm.solution 11console 121.0-SNAPSHOT 13jar 1415console 16http://maven.apache.org 171819 2122UTF-8 2023 24 87888925 29lm.solution 26pojo 271.0-SNAPSHOT 2830 34lm.solution 31common 321.0-SNAPSHOT 3335 3940 41 42lm.solution 36service 371.0-SNAPSHOT 3843 46org.codehaus.jackson 44jackson-core-asl 4547 50org.codehaus.jackson 48jackson-mapper-asl 4951 54 55com.rabbitmq 52amqp-client 5356 59 60com.alibaba 57fastjson 5861 64 65commons-io 62commons-io 6366 69 70javax.annotation 67jsr250-api 6871 7475 76javax.servlet 72javax.servlet-api 7377 81junit 78junit 79RELEASE 8082 86org.springframework 83spring-test 844.3.13.RELEASE 85
7.web/pom.xml
這個模塊是做為 web 站點的。
重複內容不在講解,參考上文的說明。
< packaging>war packaging>
講解:
因為這模塊在編譯後是部署到 tomcat 容器的,所以這裡採用的打包方式是 war 值。
web/pom.xml
13 4 8solution 5lm.solution 61.0-SNAPSHOT 74.0.0 9lm.solution 10web 11war 121.0-SNAPSHOT 13web Maven Webapp 14http://maven.apache.org 1516 17 15918 22lm.solution 19service 201.0-SNAPSHOT 2123 2728 29 30lm.solution 24common 251.0-SNAPSHOT 2631 35 36org.springframework 32 33spring-webmvc 3437 40 41cglib 38cglib 3942 45 46org.mybatis 43mybatis 4447 50 51org.mybatis 48mybatis-spring 4952 55 56mysql 53mysql-connector-java 5457 61 62com.alibaba 58druid 59 6063 67javax.servlet 64javax.servlet-api 65provided 6668 72javax.servlet.jsp 69jsp-api 70provided 7173 76 77javax.servlet 74jstl 7578 82 83net.sf.json-lib 79json-lib 80jdk15 8184 87 88dom4j 85dom4j 8689 92net.sf.ehcache 90ehcache-core 9193 96 97net.sf.ehcache 94ehcache-web 9598 101commons-fileupload 99commons-fileupload 100102 105 106commons-io 103commons-io 104107 110commons-codec 108commons-codec 109111 114org.apache.commons 112commons-collections4 113115 118 119org.apache.commons 116commons-lang3 117120 129 130commons-beanutils 121commons-beanutils 122123 128124 127commons-logging 125commons-logging 126131 134 135org.freemarker 132freemarker 133136 139org.apache.httpcomponents 137httpcore 138140 143 144org.apache.httpcomponents 141httpclient 142145 148 149redis.clients 146jedis 147150 153 154com.rabbitmq 151amqp-client 152155 158com.alibaba 156fastjson 157160 169web 161162163 168164 167org.apache.tomcat.maven 165tomcat8-maven-plugin 166
8.webapi/pom.xml
這個模塊是做為 Restful API 站點的。
重複內容不在講解,參考上文的說明。
134 5 910solution 6lm.solution 71.0-SNAPSHOT 84.0.0 11lm.solution 12webapi 13war 141.0-SNAPSHOT 15webapi Maven Webapp 16http://maven.apache.org 171819 20 11511621 25lm.solution 22service 231.0-SNAPSHOT 2426 3031 32lm.solution 27common 281.0-SNAPSHOT 2933 3637 38cglib 34cglib 3539 42org.mybatis 40mybatis-spring 4143 47javax.servlet 44javax.servlet-api 45provided 4648 52javax.servlet.jsp 49jsp-api 50provided 5153 56 57javax.servlet 54jstl 5558 62 63net.sf.json-lib 59json-lib 60jdk15 6164 67 68dom4j 65dom4j 6669 72net.sf.ehcache 70ehcache-core 7173 76 77net.sf.ehcache 74ehcache-web 7578 81commons-fileupload 79commons-fileupload 8082 85commons-io 83commons-io 8486 89commons-codec 87commons-codec 8890 93org.apache.commons 91commons-collections4 9294 97 98org.apache.commons 95commons-lang3 9699 108 109commons-beanutils 100commons-beanutils 101102 107103 106commons-logging 104commons-logging 105110 113114org.freemarker 111freemarker 112117 126webapi 118119120 125121 124org.apache.tomcat.maven 122tomcat8-maven-plugin 123
9.webservice/pom.xml
這個模塊是做為 JAX-WS 服務站點的。
重複內容不在講解,參考上文的說明。
13 4 8solution 5lm.solution 61.0-SNAPSHOT 74.0.0 910lm.solution 11webservice 121.0-SNAPSHOT 13war 1415webservice Maven Webapp 16http://maven.apache.org 171819 20 323321 2526 27lm.solution 22service 231.0-SNAPSHOT 2428 31com.sun.xml.ws 29jaxws-rt 3034 36webservice 35
閱讀更多 菜根譚 的文章