基于 Maven 的多模块 Java ( Spring ) 项目构建

Posted Meng.NET

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于 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中的菜单位置

 

 

  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 xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  2          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  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>
 19 
 20     <name>solution</name>
 21     <url>http://maven.apache.org</url>
 22 
 23     <properties>
 24         <!--编译字符集-->
 25         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 26         <!-- spring -->
 27         <spring.version>4.3.13.RELEASE</spring.version>
 28         <!-- log4j -->
 29         <slf4j.version>1.7.7</slf4j.version>
 30         <log4j.version>1.2.17</log4j.version>
 31         <!-- jackson -->
 32         <jackson.version>2.9.4</jackson.version>
 33         <!-- junit -->
 34         <junit.version>4.12</junit.version>
 35         <!-- aspectj -->
 36         <aspectj.version>1.8.13</aspectj.version>
 37         <!-- cglib -->
 38         <cglib.version>3.1</cglib.version>
 39         <!-- mybatis -->
 40         <mybatis.version>3.4.5</mybatis.version>
 41         <!-- mybatis-spring -->
 42         <mybatisSpring.version>1.3.1</mybatisSpring.version>
 43         <!--mysql-connector-->
 44         <mysql.version>5.1.34</mysql.version>
 45         <!--druid-->
 46         <druid.version>1.0.5</druid.version>
 47         <!--javax.servlet-->
 48         <javaxServlet.version>3.0.1</javaxServlet.version>
 49         <!--jsp-api-->
 50         <jspApi.version>2.2</jspApi.version>
 51         <!--jstl-->
 52         <jstl.version>1.2</jstl.version>
 53         <!--json-lib-->
 54         <jsonLib.version>2.1</jsonLib.version>
 55         <!--jackson old-->
 56         <jacksonOld.version>1.9.13</jacksonOld.version>
 57         <!--dom4j-->
 58         <dom4j.version>1.6.1</dom4j.version>
 59         <!--ehcache core-->
 60         <ehcacheCore.version>2.6.9</ehcacheCore.version>
 61         <!--ehcache web-->
 62         <ehcacheWeb.version>2.0.4</ehcacheWeb.version>
 63         <!--commons-fileupload-->
 64         <commonsFileupload.version>1.3.1</commonsFileupload.version>
 65         <!--commons-io-->
 66         <commonsIo.version>2.4</commonsIo.version>
 67         <!--commons-codec-->
 68         <commonsCodec.version>1.9</commonsCodec.version>
 69         <!--commons-collections4-->
 70         <commonsCollections4.version>4.0</commonsCollections4.version>
 71         <!--commons-beanutils-->
 72         <commonsBeanutils.version>1.7.0</commonsBeanutils.version>
 73         <!--freemarker-->
 74         <freemarker.version>2.3.19</freemarker.version>
 75         <!-- poi  poi-ooxml -->
 76         <poi.version>3.9</poi.version>
 77         <!--org.apache.httpcomponents-->
 78         <httpcore.version>4.4.8</httpcore.version>
 79         <httpclient.version>4.5.4</httpclient.version>
 80         <!-- jaxws-rt -->
 81         <jaxwsRt.version>2.3.0</jaxwsRt.version>
 82         <!-- jedis -->
 83         <jedis.version>2.9.0</jedis.version>
 84         <!-- rabbitmq -->
 85         <amqpClient.version>5.1.2</amqpClient.version>
 86         <!--fastjson-->
 87         <fastjson.version>1.2.46</fastjson.version>
 88         <!-- jsr250 -->
 89         <jsr250.version>1.0</jsr250.version>
 90     </properties>
 91 
 92     <dependencies>
 93         <!--单元测试依赖 -->
 94         <dependency>
 95             <groupId>junit</groupId>
 96             <artifactId>junit</artifactId>
 97             <version>RELEASE</version>
 98             <!--test 说明这个包的存活是在test周期,也就是发布时将不包含这个jar包-->
 99             <scope>test</scope>
100         </dependency>
101         <!--spring单元测试依赖 -->
102         <dependency>
103             <groupId>org.springframework</groupId>
104             <artifactId>spring-test</artifactId>
105             <version>${spring.version}</version>
106             <scope>test</scope>
107         </dependency>
108         <!-- spring -->
109         <dependency>
110             <groupId>org.springframework</groupId>
111             <!-- 因依赖 会自动引入 spring-aop spring-beans spring-core spring-expression 四个包 -->
112             <artifactId>spring-context</artifactId>
113             <version>${spring.version}</version>
114         </dependency>
115         <dependency>
116             <groupId>org.springframework</groupId>
117             <artifactId>spring-context-support</artifactId>
118             <version>${spring.version}</version>
119         </dependency>
120         <dependency>
121             <groupId>org.springframework</groupId>
122             <artifactId>spring-aspects</artifactId>
123             <version>${spring.version}</version>
124         </dependency>
125         <dependency>
126             <groupId>org.springframework</groupId>
127             <artifactId>spring-tx</artifactId>
128             <version>${spring.version}</version>
129         </dependency>
130         <dependency>
131             <groupId>org.springframework</groupId>
132             <artifactId>spring-jdbc</artifactId>
133             <version>${spring.version}</version>
134         </dependency>
135         <!-- aspectj AOP -->
136         <dependency>
137             <groupId>org.aspectj</groupId>
138             <artifactId>aspectjrt</artifactId>
139             <version>${aspectj.version}</version>
140         </dependency>
141         <dependency>
142             <groupId>org.aspectj</groupId>
143             <artifactId>aspectjweaver</artifactId>
144             <version>${aspectj.version}</version>
145         </dependency>
146         <!-- 映入JSON jackson -->
147         <dependency>
148             <groupId>com.fasterxml.jackson.core</groupId>
149             <artifactId>jackson-annotations</artifactId>
150             <version>${jackson.version}</version>
151         </dependency>
152         <dependency>
153             <groupId>com.fasterxml.jackson.core</groupId>
154             <artifactId>jackson-databind</artifactId>
155             <version>${jackson.version}</version>
156         </dependency>
157         <dependency>
158             <groupId>com.fasterxml.jackson.core</groupId>
159             <artifactId>jackson-core</artifactId>
160             <version>${jackson.version}</version>
161         </dependency>
162         <dependency>
163             <groupId>com.fasterxml.jackson.dataformat</groupId>
164             <artifactId>jackson-dataformat-xml</artifactId>
165             <version>${jackson.version}</version>
166         </dependency>
167         <!-- 日志文件管理包 -->
168         <dependency>
169             <groupId>log4j</groupId>
170             <artifactId>log4j</artifactId>
171             <version>${log4j.version}</version>
172         </dependency>
173         <dependency>
174             <groupId>org.slf4j</groupId无法使用 Maven 编译多模块 Spring 项目

maven的多模块项目搭建

大厂Java项目如何进行Maven多模块管理

具有父 POM 的多模块项目的 Maven 版本控制

在eclipse中公布maven的多模块web项目到tomcat上及单步debug模块jar

<转>创建支持eclipse的多模块maven项目