maven多模块开发

多模块划分

1.为什么需要划分模块

像我们之前的这个项目,很常见的Spring+SpringMVC+Mybatis整合开发的web应用,在这个应用中,我们习惯性的把项目分了这么几层:
(1) Web层,负责与客户端交互,主要是一些Controller类
(2) Service层,处理业务逻辑,放一些Service接口和实现类
(3) Mapper层负责与数据库的交互
(4) Domain层,存放封装数据的实体类
对应的结构图如下:

但随着项目的进行,我们可能遇到下面一系列的问题:
(1) 大部分的domain或者一些service以及mapper在多个项目中是通用的
(2) Pom.xml中的依赖越来越长
(3) Build整个项目的时间越来越长,尽管你只是一直在web层工作,但是不得不build整个项目
(4) 某个模块,比如mapper,你只想让一些经验丰富的人来维护,但是现在每个开发者都能修改这个模块,这导致关键模块的代码质量达不到你的要求

2.通俗来讲什么是划分模块
一个大项目拆分为多个小项目(maven模块)组成,而且它们是有依赖关系的.
3.各个模块的作用
maven模块名放那些内容
basic-util工具类:Ajaxresult PageList StringUtils
basic-core基础核心:核心实现
crm1-common项目对应的公共东西,domain,query
crm1-mapper映射器,*Mapper.java *Mapper.xml
crm1-service业务模块
crm1-webweb模块提供数据(接口层)
4.具体流程
4.1新建一个普通的maven项目:crmyang_parent

new->project
在这里插入图片描述

4.2在父类模块crmyang_parent中导入公共的必要的包
<properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <!-- spring版本号 -->
        <spring.version>4.1.2.RELEASE</spring.version>
        <!-- mybatis版本号 -->
        <mybatis.version>3.2.1</mybatis.version>
        <!-- log4j日志文件管理包版本 -->
        <slf4j.version>1.7.2</slf4j.version>
        <log4j.version>1.2.17</log4j.version>
        <!-- jackson包版本 -->
        <jackson.version>2.5.0</jackson.version>
    </properties>
<dependencies>
        <!--Spring核心-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aop</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aspects</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-expression</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>1.1.1</version>
        </dependency>

        <!--aop依赖包-->
        <dependency>
            <groupId>aopalliance</groupId>
            <artifactId>aopalliance</artifactId>
            <version>1.0</version>
        </dependency>
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>1.6.8</version>
        </dependency>
    </dependencies>
4.3basic_util模块的搭建

在父类模块的基础上在新建一个普通的maven模块
basic_util作用:
作为各个项目的公共工具

结构图
在这里插入图片描述

4.4basic_core模块的搭建

在父类模块的基础上在新建一个普通的maven模块
basic_core作用:
作为各项目的公共的抽取,依赖basic-utils模块
结构图
在这里插入图片描述
pom.xml的更改
为了在base中使用@autowired @Transactional注解,所以在basic_core的pom.xml文件中增加jar包

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-beans</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-beans</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-tx</artifactId>
        <version>${spring.version}</version>
    </dependency>
4.5crmyang-common模块的搭建

在父类模块的基础上在新建一个普通的maven模块
crmyang-common作用:
crmyang-common本模块作为一个项目三层的公共部分的抽取,依赖basic-core
结构图
在这里插入图片描述
依赖关系
依赖basic_core中的关系,所以在pom.xml中加入依赖关系

<dependencies>
        <dependency>
            <groupId>cn.itsource</groupId>
            <artifactId>basic_core</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>
4.6crmyang-mapper模块的搭建

在父类模块的基础上在新建一个普通的maven模块
crmyang-mapper作用:
crmyang-mapper本模块作为一个项目持久层,依赖crmyang-common和basic-core:
包含mapper接口和映射;和持久层的配置
结构图
在这里插入图片描述
依赖关系和自己所需要的jar包

<dependencies>
        <dependency>
            <groupId>cn.itsource</groupId>
            <artifactId>crmyang_common</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>${spring.version}</version>
        </dependency>


        <!--Mybatis集成-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>${mybatis.version}</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>1.2.0</version>
        </dependency>
        <!--log4j-->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>${log4j.version}</version>
        </dependency>

        <!--slf4j-->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>${slf4j.version}</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>${slf4j.version}</version>
            <scope>test</scope>
        </dependency>

        <!--数据库连接驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.46</version>
        </dependency>
        <!--数据库连接池-->
        <dependency>
            <groupId>commons-dbcp</groupId>
            <artifactId>commons-dbcp</artifactId>
            <version>1.2.2</version>
        </dependency>
        <dependency>
            <groupId>commons-pool</groupId>
            <artifactId>commons-pool</artifactId>
            <version>1.5.3</version>
        </dependency>
    </dependencies>
4.7crmyang-servicel模块的搭建

在父类模块的基础上在新建一个普通的maven模块
crmyang-servicel作用:
crmyang-servicel本模块作为一个项目业务层,依赖crmyang-mapper
业务
结构图
在这里插入图片描述
依赖关系

	<dependencies>
        <dependency>
            <groupId>cn.itsource</groupId>
            <artifactId>crmyang_mapper</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>
4.8crmyang-web-mavenweb模块的搭建

在父类模块的基础上在新建一个maven—web模块
crmyang-web作用:
crmyang-service本模块作为一个项目表现层,依赖crmyang-service
Controller
而现在我们的整体架构为前后端分离架构,所有的静态资源全部在前端项目中
结构图
在这里插入图片描述
依赖关系和自己需要的jar包

<dependencies>
        <dependency>
            <groupId>cn.itsource</groupId>
            <artifactId>crmyang_service</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <!--SpringMVC-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <!--文件上传-->
        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.3.1</version>
        </dependency>
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.2</version>
        </dependency>
        <!--jackson-->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>${jackson.version}</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>${jackson.version}</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
            <version>${jackson.version}</version>
        </dependency>
        <!-- JSTL标签类 -->
        <dependency>
            <groupId>jstl</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>

        <!--servlet-->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.0.1</version>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.2</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>cn.itsource</groupId>
            <artifactId>basic_util</artifactId>
            <version>1.0-SNAPSHOT</version>
            <scope>compile</scope>
        </dependency>

        <!-- swagger引入包-->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>${springfox.version}</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>${springfox.version}</version>
        </dependency>
    </dependencies>
5.大体结构

在这里插入图片描述

6.加入crud代码进行测试
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值