Maven04_分模块构建工程

1、模块继承图

  

 

 

2、继承和聚合的理解

  继承:

    继承的作用是消除重复。一个完整的项目,将三层模型dao、service、controller分开创建为独立的模块,那么对于每一层的pom文件,

  都将会有重复的内容出现。比如版本编译、版本锁定等。可以将这些重复的抽取配置到父工程的pom文件中,这样子工程就可以直接使用父工程

  定义的东西,这就是maven父子工程的继承。

  聚合:

    项目的开发是分组分模块的,每一个模块开发完成后,需要运行工程,需要将每个模块聚合到一起运行。比如dao、service、controller最后

  需要聚合到一起打包为一个war包

3、示例

  1)maven-parent父模块

    创建父工程

    

 

 

     由于父工程只是提供子工程的重复配置,所以可以只保留一个pom文件即可,这里需要注意打包的方式

    

 

 

     将父工程发布到本地仓库,方便子模块继承

    

 

 

   2)maven-dao子模块

    创建dao子模块,父工程右键创建maven模块

    

 

 

     由于dao层不需要页面的交互,所以一个普通java工程即可,也不需要骨架的选择

    

 

 

     打包方式为jar包

    

 

 

     将dao模块发布到本地仓库,便于service调用

  3)maven-service模块

    整体步骤和dao层一致

  4)maven-controller模块

    创建controller模块,

    

 

 

     创建java和resources文件

    

 

 

     打包方式

    

 

 

   注意:如果父子工程中都配置了相同的插件,运行的端口和路径都以子模块为准,比如tomcat插件

4、依赖范围对传递依赖的影响

  1)问题描述

    比如上述的service模块和dao模块,service模块依赖了dao模块。dao中依赖了Junit,但是当我们在service模块中进行单元测试的时候提示没有junit的jar包。

  我们的service模块依赖了dao模块,Junit不应该传递过来吗?

  2)依赖范围对传递依赖的影响

    

 

     解释:

      ①左侧的直接依赖就是dao对junit的依赖,因为dao模块中直接引入了junit的jar包。

      ②上面的传递依赖就是service对junit的依赖,因为service需要的junit是靠dao模块的传递依赖。

      ③中间便是依赖范围对传递依赖的影响。

        例如:dao模块中junit的依赖范围是test,即最左侧为test。service模块对junit的依赖也是test,即最上面为test

      那么传递依赖就会丢失。

    解决:

      遇到这种传递丢失的情况,我们通常的解决方案是在本工程中直接添加依赖。

    比如,直接在service模块添加junit的jar包引入。

5、运行一个pom父子工程的方式

  方式一:

    在父工程中配置tomcat插件,然后直接运行父工程(tomcat:run),会自动聚合并执行

  方式二:

    在controller层配置tomcat插件,运行web层。但是注意这里必须把它的直接依赖和间接依赖全部安装到本地仓库,否则会找不到对应jar包

  方式三:

    IDEA中配置tomcat。这里也需要安装所有模块到本地仓库。

  推荐方式:

    推荐方法 2,如果子工程都在本地,采用方法 2则不需要子工程修改就立即发布到本地仓库, 父工程会自动聚合并使用最新代码执行。

        

 

    

posted @ 2022-03-24 08:44  CGGirl  阅读(77)  评论(0编辑  收藏  举报