基于 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  


分享到:


相關文章: