Maven项目分模块开发

1. 分模块开发设计

按照功能拆分

我们现在的项目都是在一个模块中,比如前面的SSM整合开发。虽然这样做功能也都实现了,但是也存在了一些问题,我们拿银行的项目为例来聊聊这个事。

  • 网络没有那么发达的时候,我们需要到银行柜台或者取款机进行业务操作
  • 随着互联网的发展,我们有了电脑以后,就可以在网页上登录银行网站使用U盾进行业务操作
  • 再来就是随着智能手机的普及,我们只需要用手机登录APP就可以进行业务操作

上面三个场景出现的时间是不相同的,如果非要把三个场景的模块代码放入到一个项目,那么当其中某一个模块代码出现问题,就会导致整个项目无法正常启动,从而导致银行的多个业务都无法正常班理。所以我们会按照功能将项目进行拆分。

按照模块拆分

比如电商的项目中,有订单和商品两个模块,订单中需要包含商品的详细信息,所以需要商品的模型类,商品模块也会用到商品的模型类,这个时候如果两个模块中都写模型类,就会出现重复代码,后期的维护成本就比较高。我们就想能不能将它们公共的部分抽取成一个独立的模块,其他模块要想使用可以像添加第三方jar包依赖一样来使用我们自己抽取的模块,这样就解决了代码重复的问题,这种拆分方式就说我们所说的按照模块拆分。

经过两个案例的分析,我们就知道:

  • 将原始模块按照功能拆分成若干个子模块,方便模块间的相互调用,接口共享。

刚刚我们说了可以将domain层进行拆分,除了domain层,我们也可以将其他的层也拆成一个个对立的模块,如:

这样的话,项目中的每一层都可以单独维护,也可以很方便的被别人使用。关于分模块开发的意义,我们就说完了,说了这么多好处,那么该如何实现呢?

2. 分模块开发实现

前面我们已经完成了SSM整合,接下来,咱们就基于SSM整合的项目来实现对项目的拆分。

2.1 环境准备

  • 创建一个Web的Maven项目
  • pom.xml添加SSM整合所需jar包
  • 创建对应的配置类
  • 编写Controller、Service接口、Service实现类、Dao接口和模型类
  • resources下提供jdbc.properties配置文件

将环境快速准备好,部署成功后,最终创建好的项目结构如下:

2.2 抽取domain层

步骤1:创建新模块

创建一个名称为maven_03_ssm_pojo的jar项目,这块的名称可以任意。

步骤2:项目中创建domain包

maven_03_ssm_pojo项目中创建com.dcxuexi.domain包,并将maven_02_ssm中User类拷贝到该包中

步骤3:删除原项目中的domain包

删除后,maven_02_ssm项目中用到User的类中都会有红色提示,如下:

说明:出错的原因是maven_02_ssm中已经将User类删除,所以该项目找不到User类,所以报错

要想解决上述问题,我们需要在maven_02_ssm中添加maven_03_ssm_pojo的依赖。

步骤4:建立依赖关系

maven_02_ssm项目的pom.xml添加maven_03_ssm_pojo的依赖

    <dependency>
      <groupId>com.dcxuexi</groupId>
      <artifactId>maven_03_ssm_pojo</artifactId>
      <version>1.0-SNAPSHOT</version>
    </dependency>

因为添加了依赖,所以在maven_02_ssm中就已经能找到User类,所以刚才的报红提示就会消失。

步骤5:编译maven_02_ssm项目

编译maven_02_ssm你会在控制台看到如下错误

错误信息为:不能解决maven_02_ssm项目的依赖问题,找不到maven_03_ssm_pojo这个jar包。

为什么找不到呢?

原因是Maven会从本地仓库找对应的jar包,但是本地仓库又不存在该jar包所以会报错。

在IDEA中是有maven_03_ssm_pojo这个项目,所以我们只需要将maven_03_ssm_pojo项目安装到本地仓库即可。

步骤6:将项目安装本地仓库

将需要被依赖的项目maven_03_ssm_pojo,使用maven的install命令,把其安装到Maven的本地仓库中。

安装成功后,在对应的路径下就看到安装好的jar包

说明:具体安装在哪里,和你们自己电脑上Maven的本地仓库配置的位置有关。

当再次执行maven_02_ssm的compile的命令后,就已经能够成功编译。

2.3 抽取Dao层

步骤1:创建新模块

创建一个名称为maven_04_dao的jar项目

步骤2:项目中创建dao包

maven_03_ssm_dao项目中创建com.dcxuexi.dao包,并将maven_02_ssm中UserDao类拷贝到该包中

maven_03_ssm_dao中会有如下几个问题需要解决下:

  • 项目maven_03_ssm_dao的BookDao接口中UserDao类找不到报错

    • 解决方案在maven_03_ssm_dao项目的pom.xml中添加maven_03_ssm_pojo项目

      <dependencies>
              <dependency>
                  <groupId>com.dcxuexi</groupId>
                  <artifactId>maven_03_ssm_pojo</artifactId>
                  <version>1.0-SNAPSHOT</version>
              </dependency>
      </dependencies>
      
  • 项目maven_03_ssm_dao的UserDao接口中,Mybatis的增删改查注解报错

    • 解决方案在maven_03_ssm_dao项目的pom.xml中添加mybatis的相关依赖

      <dependencies>
              <dependency>
                  <groupId>org.mybatis</groupId>
                  <artifactId>mybatis</artifactId>
                  <version>3.5.10</version>
              </dependency>
              <dependency>
                  <groupId>mysql</groupId>
                  <artifactId>mysql-connector-java</artifactId>
                  <version>8.0.30</version>
              </dependency>
      </dependencies>
      

步骤3:删除原项目中的dao包

删除Dao包以后,因为maven_02_ssm中的UserServiceImpl类中有使用到Dao的内容,所以需要在maven_02_ssm的pom.xml添加maven_03_ssm_dao的依赖

    <dependency>
      <groupId>com.dcxuexi</groupId>
      <artifactId>maven_03_ssm_dao</artifactId>
      <version>1.0-SNAPSHOT</version>
    </dependency>

此时在maven_02_ssm项目中就已经添加了maven_03_ssm_pojomaven_03_ssm_dao

再次对maven_02_ssm项目进行编译,又会报错,如下:

和刚才的错误原因是一样的,maven在仓库中没有找到maven_03_ssm_dao,所以此时我们只需要将maven_03_ssm_dao安装到Maven的本地仓库即可。

步骤4:将项目安装到本地仓库

将需要被依赖的项目maven_03_ssm_dao,使用maven的install命令,把其安装到Maven的本地仓库中。

安装成功后,在对应的路径下就看到了安装好对应的jar包

当再次执行maven_02_ssm的compile的指令后,就已经能够成功编译。

2.4 抽取Service层

步骤1:创建新模块

创建一个名称为maven_03_ssm_service的jar项目

步骤2:项目中创建service包

maven_03_ssm_service项目中创建com.dcxuexi.service包,并将maven_02_ssm中UserService与UserServiceImpl拷贝到该包中

maven_03_ssm_service中会有如下几个问题需要解决下:

  • 项目maven_03_ssm_service的UserService接口与UserServiceImpl实现类中UserDao接口与User类找不到报错

    • 解决方案在maven_03_ssm_service项目的pom.xml中添加maven_03_ssm_pojomaven_03_ssm_dao项目

      <dependencies>
              <dependency>
                  <groupId>com.dcxuexi</groupId>
                  <artifactId>maven_03_ssm_pojo</artifactId>
                  <version>1.0-SNAPSHOT</version>
              </dependency>
              <dependency>
                  <groupId>com.dcxuexi</groupId>
                  <artifactId>maven_03_ssm_dao</artifactId>
                  <version>1.0-SNAPSHOT</version>
              </dependency>
      </dependencies>
      
  • 项目maven_03_ssm_service的UserServiceImpl接口中,Spring的Service、Autowired注解报错

    • 解决方案在maven_03_ssm_service项目的pom.xml中添加Spring的相关依赖

      <dependencies>
              <dependency>
                  <groupId>org.springframework</groupId>
                  <artifactId>spring-webmvc</artifactId>
                  <version>5.2.15.RELEASE</version>
              </dependency>
      </dependencies>
      

步骤3:删除原项目中的service包

删除service包以后,因为maven_02_ssm中的UserController类中有使用到service的内容,所以需要在maven_02_ssm的pom.xml添加maven_03_ssm_service的依赖

    <dependency>
      <groupId>com.dcxuexi</groupId>
      <artifactId>maven_03_ssm_service</artifactId>
      <version>1.0-SNAPSHOT</version>
    </dependency>

此时在maven_02_ssm项目中就已经添加了maven_03_ssm_pojomaven_03_ssm_daomaven_03_ssm_service

再次对maven_02_ssm项目进行编译,又会报错,如下:

和刚才的错误原因是一样的,maven在仓库中没有找到maven_03_ssm_service,所以此时我们只需要将maven_03_ssm_service安装到Maven的本地仓库即可。

步骤4:将项目安装到本地仓库

将需要被依赖的项目maven_03_ssm_service,使用maven的install命令,把其安装到Maven的本地仓库中。

安装成功后,在对应的路径下就看到了安装好对应的jar包

当再次执行maven_02_ssm的compile的指令后,就已经能够成功编译。

2.5 抽取Controller层

步骤1:创建新模块

创建一个名称为maven_03_ssm_controller的jar项目

步骤2:项目中创建controller包

maven_03_ssm_controller项目中创建com.dcxuexi.service包,并将maven_02_ssm中UserController拷贝到该包中

maven_03_ssm_controller中会有如下几个问题需要解决下:

  • 项目maven_03_ssm_controller的UserController类中UserService接口与User类找不到报错

    • 解决方案在maven_03_ssm_controller项目的pom.xml中添加maven_03_ssm_pojomaven_03_ssm_service项目

      <dependencies>
              <dependency>
                  <groupId>com.dcxuexi</groupId>
                  <artifactId>maven_03_ssm_pojo</artifactId>
                  <version>1.0-SNAPSHOT</version>
              </dependency>
              <dependency>
                  <groupId>com.dcxuexi</groupId>
                  <artifactId>maven_03_ssm_service</artifactId>
                  <version>1.0-SNAPSHOT</version>
              </dependency>
      </dependencies>
      
  • 项目maven_03_ssm_controller的UserController类中,Spring的RestController、Autowired等注解报错

    • 解决方案在maven_03_ssm_controller项目的pom.xml中添加Spring的相关依赖

      <dependencies>
              <dependency>
                  <groupId>org.springframework</groupId>
                  <artifactId>spring-webmvc</artifactId>
                  <version>5.2.15.RELEASE</version>
              </dependency>
      </dependencies>
      

步骤3:删除原项目中的controller包

删除controller包以后,因为maven_02_ssm中的UserController类中有使用到controller的内容,所以需要在maven_02_ssm的pom.xml添加maven_03_ssm_controller的依赖

    <dependency>
      <groupId>com.dcxuexi</groupId>
      <artifactId>maven_03_ssm_controller</artifactId>
      <version>1.0-SNAPSHOT</version>
    </dependency>

此时在maven_02_ssm项目中就已经添加了maven_03_ssm_pojomaven_03_ssm_daomaven_03_ssm_servicemaven_03_ssm_controller

再次对maven_02_ssm项目进行编译,又会报错,如下:

和刚才的错误原因是一样的,maven在仓库中没有找到maven_03_ssm_controller,所以此时我们只需要将maven_03_ssm_controller安装到Maven的本地仓库即可。

步骤4:将项目安装到本地仓库

将需要被依赖的项目maven_03_ssm_controller,使用maven的install命令,把其安装到Maven的本地仓库中。

安装成功后,在对应的路径下就看到了安装好对应的jar包

当再次执行maven_02_ssm的compile的指令后,就已经能够成功编译。

2.6 运行测试并总结

将抽取后的项目进行运行,测试之前的增删改查功能依然能够使用。

所以对于项目的拆分,大致会有如下几个步骤:

(1) 创建Maven模块

(2) 书写模块代码

分模块开发需要先针对模块功能进行设计,再进行编码。不会先将工程开发完毕,然后进行拆分。拆分方式可以按照功能拆也可以按照模块拆。

(3) 通过maven指令安装模块到本地仓库(install 指令)

团队内部开发需要发布模块功能到团队内部可共享的仓库中(私服)。

项目代码

原文地址:http://www.cnblogs.com/dcbut/p/16890329.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性