参看代码 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
1 <project> 3 <modelversion>4.0.0/<modelversion> 4 5 <groupid>lm.solution/<groupid> 6 <artifactid>solution/<artifactid> 7 <version>1.0-SNAPSHOT/<version> 8 <modules> 9 <module>webapi/<module>10 <module>web/<module>11 <module>common/<module>12 <module>service/<module>13 <module>mapper/<module>14 <module>pojo/<module>15 <module>console/<module>16 <module>webservice/<module>17 /<modules>18 <packaging>pom/<packaging>1920 <name>solution/<name>21 http://maven.apache.org2223 <properties>24 25 <project.build.sourceencoding>UTF-8/<project.build.sourceencoding>26 27 <spring.version>4.3.13.RELEASE/<spring.version>28 29 <slf4j.version>1.7.7/<slf4j.version>30 <log4j.version>1.2.17/<log4j.version>31 32 <jackson.version>2.9.4/<jackson.version>33 34 <junit.version>4.12/<junit.version>35 36 <aspectj.version>1.8.13/<aspectj.version>37 38 <cglib.version>3.1/<cglib.version>39 40 <mybatis.version>3.4.5/<mybatis.version>41 42 <mybatisspring.version>1.3.1/<mybatisspring.version>43 44 <mysql.version>5.1.34/<mysql.version>45 46 <druid.version>1.0.5/<druid.version>47 48 <javaxservlet.version>3.0.1/<javaxservlet.version>49 50 <jspapi.version>2.2/<jspapi.version>51
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 <project>3 <parent>4 <artifactid>solution/<artifactid>5 <groupid>lm.solution/<groupid>6 <version>1.0-SNAPSHOT/<version>7 /<parent>8 <modelversion>4.0.0/<modelversion>910 <groupid>lm.solution/<groupid>11 <artifactid>pojo/<artifactid>12 <version>1.0-SNAPSHOT/<version>13 <packaging>jar/<packaging>1415 <name>pojo/<name>16 http://maven.apache.org1718 <properties>19 <project.build.sourceencoding>UTF-8/<project.build.sourceencoding>20 /<properties>2122 <dependencies>23 2425 2627 /<dependencies>28 /<project>
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 <project>3 <parent>4 <artifactid>solution/<artifactid>5 <groupid>lm.solution/<groupid>6 <version>1.0-SNAPSHOT/<version>7 /<parent>8 <modelversion>4.0.0/<modelversion>910 <groupid>lm.solution/<groupid>11 <artifactid>mapper/<artifactid>12 <version>1.0-SNAPSHOT/<version>13 <packaging>jar/<packaging>1415 <name>mapper/<name>16 http://maven.apache.org1718 <properties>19 <project.build.sourceencoding>UTF-8/<project.build.sourceencoding>20 /<properties>2122 <dependencies>23 24 <dependency>25 <groupid>lm.solution/<groupid>26 <artifactid>pojo/<artifactid>27 <version>1.0-SNAPSHOT/<version>28 /<dependency>2930 31 <dependency>32 <groupid>org.mybatis/<groupid>33 <artifactid>mybatis/<artifactid>34 /<dependency>35 <dependency>36 <groupid>mysql/<groupid>37 <artifactid>mysql-connector-java/<artifactid>38 /<dependency>39 <dependency>40 <groupid>com.alibaba/<groupid>41 <artifactid>druid/<artifactid>42 <scope>runtime/<scope>43 /<dependency>44 /<dependencies>45 /<project>
4.common/pom.xml
这个模块是做为公共类库模块的。
重复内容不在讲解,参考上文的说明。
1 <project>3 <parent>4 <artifactid>solution/<artifactid>5 <groupid>lm.solution/<groupid>6 <version>1.0-SNAPSHOT/<version>7 /<parent>8 <modelversion>4.0.0/<modelversion>910 <groupid>lm.solution/<groupid>11 <artifactid>common/<artifactid>12 <version>1.0-SNAPSHOT/<version>13 <packaging>jar/<packaging>1415 <name>common/<name>16 http://maven.apache.org1718 <dependencies>19 20 <dependency>21 <groupid>lm.solution/<groupid>22 <artifactid>pojo/<artifactid>23 <version>1.0-SNAPSHOT/<version>24 /<dependency>2526 27 28 <dependency>29 <groupid>org.springframework/<groupid>30 <artifactid>spring-webmvc/<artifactid>31 /<dependency>32 33 <dependency>34 <groupid>org.apache.poi/<groupid>35 <artifactid>poi/<artifactid>36 /<dependency>37 38 <dependency>39 <groupid>org.apache.poi/<groupid>40 <artifactid>poi-ooxml/<artifactid>41 /<dependency>42 43 <dependency>44 <groupid>javax.servlet/<groupid>45 <artifactid>javax.servlet-api/<artifactid>46 <scope>provided/<scope>47 /<dependency>48 49 <dependency>50 <groupid>org.apache.httpcomponents/<groupid>51 <artifactid>httpcore/<artifactid>52 /<dependency>53 <dependency>54 <groupid>org.apache.httpcomponents/<groupid>55 <artifactid>httpclient/<artifactid>56 /<dependency>57 58 <dependency>59 <groupid>org.apache.commons/<groupid>60 <artifactid>commons-collections4/<artifactid>61 /<dependency>62 63 <dependency>64 <groupid>redis.clients/<groupid>65 <artifactid>jedis/<artifactid>66 /<dependency>67 68 <dependency>69 <groupid>com.rabbitmq/<groupid>70 <artifactid>amqp-client/<artifactid>71 /<dependency>72 /<dependencies>73 /<project>
5.service/pom.xml
这个模块是做为服务类库模块的。
重复内容不在讲解,参考上文的说明。
1 <project>3 <parent>4 <artifactid>solution/<artifactid>5 <groupid>lm.solution/<groupid>6 <version>1.0-SNAPSHOT/<version>7 /<parent>8 <modelversion>4.0.0/<modelversion>910 <groupid>lm.solution/<groupid>11 <artifactid>service/<artifactid>12 <version>1.0-SNAPSHOT/<version>13 <packaging>jar/<packaging>1415 <name>service/<name>16 http://maven.apache.org1718 <properties>19 <project.build.sourceencoding>UTF-8/<project.build.sourceencoding>20 /<properties>2122 <dependencies>23 24 <dependency>25 <groupid>lm.solution/<groupid>26 <artifactid>mapper/<artifactid>27 <version>1.0-SNAPSHOT/<version>28 /<dependency>2930 3132 /<dependencies>33 /<project>
6.console/pom.xml
这个模块是做为各种测试用的模块。
重复内容不在讲解,参考上文的说明。
1 <project>3 <parent>4 <artifactid>solution/<artifactid>5 <groupid>lm.solution/<groupid>6 <version>1.0-SNAPSHOT/<version>7 /<parent>8 <modelversion>4.0.0/<modelversion>910 <groupid>lm.solution/<groupid>11 <artifactid>console/<artifactid>12 <version>1.0-SNAPSHOT/<version>13 <packaging>jar/<packaging>1415 <name>console/<name>16 http://maven.apache.org1718 <properties>19 <project.build.sourceencoding>UTF-8/<project.build.sourceencoding>20 /<properties>2122 <dependencies>23 24 <dependency>25 <groupid>lm.solution/<groupid>26 <artifactid>pojo/<artifactid>27 <version>1.0-SNAPSHOT/<version>28 /<dependency>29 <dependency>30 <groupid>lm.solution/<groupid>31 <artifactid>common/<artifactid>32 <version>1.0-SNAPSHOT/<version>33 /<dependency>34 <dependency>35 <groupid>lm.solution/<groupid>36 <artifactid>service/<artifactid>37 <version>1.0-SNAPSHOT/<version>38 /<dependency>3940
7.web/pom.xml
这个模块是做为 web 站点的。
重复内容不在讲解,参考上文的说明。
< packaging>war packaging>
讲解:
因为这模块在编译后是部署到 tomcat 容器的,所以这里采用的打包方式是 war 值。
web/pom.xml
1 <project>3 <parent>4 <artifactid>solution/<artifactid>5 <groupid>lm.solution/<groupid>6 <version>1.0-SNAPSHOT/<version>7 /<parent>8 <modelversion>4.0.0/<modelversion>9 <groupid>lm.solution/<groupid>10 <artifactid>web/<artifactid>11 <packaging>war/<packaging>12 <version>1.0-SNAPSHOT/<version>13 <name>web Maven Webapp/<name>14 http://maven.apache.org15 <dependencies>16 17 <dependency>18 <groupid>lm.solution/<groupid>19 <artifactid>service/<artifactid>20 <version>1.0-SNAPSHOT/<version>21 /<dependency>22 <dependency>23 <groupid>lm.solution/<groupid>24 <artifactid>common/<artifactid>25 <version>1.0-SNAPSHOT/<version>26 /<dependency>2728 29 30 <dependency>31 <groupid>org.springframework/<groupid>32 33 <artifactid>spring-webmvc/<artifactid>34 /<dependency>35 36 <dependency>37 <groupid>cglib/<groupid>38 <artifactid>cglib/<artifactid>39 /<dependency>40 41 <dependency>42 <groupid>org.mybatis/<groupid>43 <artifactid>mybatis/<artifactid>44 /<dependency>45 46 <dependency>47 <groupid>org.mybatis/<groupid>48 <artifactid>mybatis-spring/<artifactid>49 /<dependency>50 51 <dependency>52 <groupid>mysql/<groupid>53 <artifactid>mysql-connector-java/<artifactid>54 /<dependency>55 56 <dependency>57 <groupid>com.alibaba/<groupid>58 <artifactid>druid/<artifactid>59 60 /<dependency>61 62 <dependency>63 <groupid>javax.servlet/<groupid>64 <artifactid>javax.servlet-api/<artifactid>65 <scope>provided/<scope>66 /<dependency>67 <dependency>68 <groupid>javax.servlet.jsp/<groupid>69 <artifactid>jsp-api/<artifactid>70 <scope>provided/<scope>71 /<dependency>72 <dependency>73 <groupid>javax.servlet/<groupid>74 <artifactid>jstl/<artifactid>75 /<dependency>76 77 <dependency>78 <groupid>net.sf.json-lib/<groupid>79 <artifactid>json-lib/<artifactid>80 <classifier>jdk15/<classifier>81 /<dependency>82 83 <dependency>84 <groupid>dom4j/<groupid>85 <artifactid>dom4j/<artifactid>86 /<dependency>87 88 <dependency>89 <groupid>net.sf.ehcache/<groupid>90 <artifactid>ehcache-core/<artifactid>91 /<dependency>92 <dependency>93 <groupid>net.sf.ehcache/<groupid>94 <artifactid>ehcache-web/<artifactid>95 /<dependency>96 97 <dependency>98 <groupid>commons-fileupload/<groupid>99 <artifactid>commons-fileupload/<artifactid>100 /<dependency>101 <dependency>102 <groupid>commons-io/<groupid>103 <artifactid>commons-io/<artifactid>104 /<dependency>105 106 <dependency>107 <groupid>commons-codec/<groupid>108 <artifactid>commons-codec/<artifactid>109 /<dependency>110 <dependency>111 <groupid>org.apache.commons/<groupid>112 <artifactid>commons-collections4/<artifactid>113 /<dependency>114 <dependency>115 <groupid>org.apache.commons/<groupid>116 <artifactid>commons-lang3/<artifactid>117 /<dependency>118 119 <dependency>120 <groupid>commons-beanutils/<groupid>121 <artifactid>commons-beanutils/<artifactid>122 <exclusions>123 <exclusion>124 <groupid>commons-logging/<groupid>125 <artifactid>commons-logging/<artifactid>126 /<exclusion>127 /<exclusions>128 /<dependency>129 130 <dependency>131 <groupid>org.freemarker/<groupid>132 <artifactid>freemarker/<artifactid>133 /<dependency>134
8.webapi/pom.xml
这个模块是做为 Restful API 站点的。
重复内容不在讲解,参考上文的说明。
1 <project>34 <parent>5 <artifactid>solution/<artifactid>6 <groupid>lm.solution/<groupid>7 <version>1.0-SNAPSHOT/<version>8 /<parent>910 <modelversion>4.0.0/<modelversion>11 <groupid>lm.solution/<groupid>12 <artifactid>webapi/<artifactid>13 <packaging>war/<packaging>14 <version>1.0-SNAPSHOT/<version>15 <name>webapi Maven Webapp/<name>16 http://maven.apache.org1718 <dependencies>19 20 <dependency>21 <groupid>lm.solution/<groupid>22 <artifactid>service/<artifactid>23 <version>1.0-SNAPSHOT/<version>24 /<dependency>25 <dependency>26 <groupid>lm.solution/<groupid>27 <artifactid>common/<artifactid>28 <version>1.0-SNAPSHOT/<version>29 /<dependency>3031 32 <dependency>33 <groupid>cglib/<groupid>34 <artifactid>cglib/<artifactid>35 /<dependency>3637 38 <dependency>39 <groupid>org.mybatis/<groupid>40 <artifactid>mybatis-spring/<artifactid>41 /<dependency>42 <dependency>43 <groupid>javax.servlet/<groupid>44 <artifactid>javax.servlet-api/<artifactid>45 <scope>provided/<scope>46 /<dependency>47 <dependency>48 <groupid>javax.servlet.jsp/<groupid>49 <artifactid>jsp-api/<artifactid>50 <scope>provided/<scope>51 /<dependency>52 <dependency>53 <groupid>javax.servlet/<groupid>54 <artifactid>jstl/<artifactid>55 /<dependency>56 57 <dependency>58 <groupid>net.sf.json-lib/<groupid>59 <artifactid>json-lib/<artifactid>60 <classifier>jdk15/<classifier>61 /<dependency>62 63 <dependency>64 <groupid>dom4j/<groupid>65 <artifactid>dom4j/<artifactid>66 /<dependency>67 68 <dependency>69 <groupid>net.sf.ehcache/<groupid>70 <artifactid>ehcache-core/<artifactid>71 /<dependency>72 <dependency>73 <groupid>net.sf.ehcache/<groupid>74 <artifactid>ehcache-web/<artifactid>75 /<dependency>76 77 <dependency>78 <groupid>commons-fileupload/<groupid>79 <artifactid>commons-fileupload/<artifactid>80 /<dependency>81 <dependency>82 <groupid>commons-io/<groupid>83 <artifactid>commons-io/<artifactid>84 /<dependency>85 <dependency>86 <groupid>commons-codec/<groupid>87 <artifactid>commons-codec/<artifactid>88 /<dependency>89 <dependency>90 <groupid>org.apache.commons/<groupid>91 <artifactid>commons-collections4/<artifactid>92 /<dependency>93 <dependency>94 <groupid>org.apache.commons/<groupid>95 <artifactid>commons-lang3/<artifactid>96 /<dependency>97 98 <dependency>99 <groupid>commons-beanutils/<groupid>100 <artifactid>commons-beanutils/<artifactid>101 <exclusions>102 <exclusion>103 <groupid>commons-logging/<groupid>104 <artifactid>commons-logging/<artifactid>105 /<exclusion>106 /<exclusions>107 /<dependency>108 109 <dependency>110 <groupid>org.freemarker/<groupid>111 <artifactid>freemarker/<artifactid>112 /<dependency>113114 /<dependencies>115116 <build>117 <finalname>webapi/<finalname>118119 <plugins>120 <plugin>121 <groupid>org.apache.tomcat.maven/<groupid>122 <artifactid>tomcat8-maven-plugin/<artifactid>123 /<plugin>124 /<plugins>125 /<build>126 /<project>
9.webservice/pom.xml
这个模块是做为 JAX-WS 服务站点的。
重复内容不在讲解,参考上文的说明。
1 <project>3 <parent>4 <artifactid>solution/<artifactid>5 <groupid>lm.solution/<groupid>6 <version>1.0-SNAPSHOT/<version>7 /<parent>8 <modelversion>4.0.0/<modelversion>910 <groupid>lm.solution/<groupid>11 <artifactid>webservice/<artifactid>12 <version>1.0-SNAPSHOT/<version>13 <packaging>war/<packaging>1415 <name>webservice Maven Webapp/<name>16 http://maven.apache.org1718 <dependencies>19 20 <dependency>21 <groupid>lm.solution/<groupid>22 <artifactid>service/<artifactid>23 <version>1.0-SNAPSHOT/<version>24 /<dependency>2526 27 <dependency>28 <groupid>com.sun.xml.ws/<groupid>29 <artifactid>jaxws-rt/<artifactid>30 /<dependency>31 /<dependencies>3233 <build>34 <finalname>webservice/<finalname>35 /<build>36 /<project>