參看代碼 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>