Maven工程的拆分与聚合

Maven工程的拆分与聚合

之前我们单独创建了一个Maven工程然后根据通过包的划分来分为 web层,service层,和dao层.

其实在一些大型项目中,我们可以通过模块来划分这个三个层

一个层对应一个单独的模块,然后一个人单独去开发一个模块

最后把这三个模块聚合起来,形成一个整体的项目

那我们今天来看一下,如何使用IDEA 来对Maven工程进行拆分合并

  1. 创建父工程,父工程的作用就是在其pom.xml文件中统一管理

子模块所需jar包,也就是说,我在父工程的pom文件中添加好jar

包后,子模块也就相当于有了此jar包,而无需在子模块的pom文件中,再次添加

File ----New—Project 弹出以下选择框

填写父工程的信息

继续下一步

创建好父工程后,可以删掉父工程的src目录只需要保留pom.xml文件即可

接下来我们创建web层的子模块

选择Maven 项目 选择 webapp模板

填写子模块信息

继续下一步,选择相应的信息

Web层的子模块就创建成功了

我们把WebMoudle的目录结构补完整

这时可以看下父工程的pom.xml文件

 

看看子工程的pom文件

接下来创建Service层的模块

创建Maven 不需要勾选模板,下一步即可

填写service模块的信息 下一步

填写Service模块名称

点击完成

然后创建Dao模块 创建方式跟创建Service模块一样,此处省略

接下来,我们要把这个三个模块聚合起来,就是说我们要在Web层调用Service层,在Service层调用Dao层.

那么就得添加依赖,也就是Web层添加依赖 ,依赖Service层,

Service层添加依赖,依赖Dao层 ,这样添加上依赖后,才能调用

看下如何添加依赖

先让Web层依赖上Service层 如下图所示

选择依赖模块

这样还没完,还得在Web模块得pom.xml文件中添加依赖,依赖上Service模块

<dependency>
    <groupId>org.westos</groupId>
    <artifactId>servicemodule</artifactId>
    <version>1.0-SNAPSHOT</version>
    <scope>compile</scope>
</dependency>

如图

然后,让Service模块依赖上Dao模块,做法跟上面一样

然后在Service的pom.xml文件中添加依赖 依赖上Dao模块

<dependencies>

    <dependency>

        <groupId>org.westos</groupId>

        <artifactId>daomodule</artifactId>

        <version>1.0-SNAPSHOT</version>

        <scope>compile</scope>

    </dependency>

</dependencies>

如图

这样我们三个模块,就依赖好了,下面我们把这个三个模块跑通

我们在Web层创建Servlet在Servlet中调用Service 在Service中调用Dao

首先我们要在父工程中的pom.xml文件中添加Web层所需的jar包,那么子模块,就无需添加了

<dependencies>

    <dependency>

        <groupId>junit</groupId>

        <artifactId>junit</artifactId>

        <version>4.9</version>

        <scope>test</scope>

    </dependency>

    <dependency>

        <groupId>javax.servlet</groupId>

        <artifactId>javax.servlet-api</artifactId>

        <version>3.1.0</version>

        <scope>provided</scope>

    </dependency>

    <dependency>

        <groupId>javax.servlet</groupId>

        <artifactId>jsp-api</artifactId>

        <version>2.0</version>

    </dependency>

</dependencies>

 

然后我在每个层中都创建了一个类,我们进行调用

这里有一个小技巧了解下

Service层调用Dao

下面是Dao层

下来我们发布项目

开启服务器运行项目

看控制台,三个模块都跑通了

 

下来比如我们要用SSH三个框架进行开发,那么我们就可以在

父工程中的pom.xml文件中添加三个框架的jar包

 

我们可已在IDEA的Maven项目管理模块菜单中查看项目中所有依赖的jar包

我们也可以显示所有jar包的树型结构图

关于Jar包版本冲突

在我们所依赖的jar包中可能会出现,多个版本不一致的jar包,那么在项目运行时会出现异常,所以如果有jar包冲突的话都需要排除

可以在IDEA jar包树型结构图中看到冲突jar包 如果是红色虚线

则表示有jar包冲突,可以右键虚线选择Exclude排除

下面给大家介绍一个排除jar包冲突的插件,叫做Maven Helper

用它排除jar包冲突的功能很强大

具体参考另一个文档

最后再说一个了解性的知识点

依赖范围对传递依赖的影响(了解)

       依赖会有依赖范围,依赖范围对传递依赖也有影响,有A、B、C,A依赖B、B依赖C,C可能是A的传递依赖,如下图:

       最左边一列为直接依赖,理解为A依赖B的范围,最顶层一行为传递依赖,理解为B依赖C的范围,行与列的交叉即为A传递依赖C的范围。

举例:

比如 A对 B 有 compile 依赖,B 对C有 runtime 依赖,那么根据表格所示A对C 有 runtime 依赖。

 

测试

dao依赖junit,scop为test

service依赖dao.

 

查看下图红色框内所示传递依赖范围:

 

所以maven-first所依赖的junit的jar没有加入到maven-web工程。

如果修改maven-first依赖junit的scop为compile,maven-first所依赖的junit的jar包会加入到maven-web工程中,符合上边表格所示,查看下图红色框内所示:

使用版本锁定实现冲突解决

首先父工程中pom.xml文件添加:

在使用坐标时,对于同一个框架,引入多次时,它的版本信息就会多次出现,所以

可以借用常量的思想,将这些版本号提取出来,在需要用到的时候,直接写版本的常量名称就可以了。

引用上面的常量

 

 

 

猜你喜欢

转载自blog.csdn.net/m0_37167369/article/details/81629351