Maven高级

Maven的依赖传递

image-20201009172242605

通过上图可以看出spring-webmvc中包括aopbeanscore ....等的jar包这就是依赖传递

依赖冲突

  • 定义:由于依赖传递现象的存在,spring-webmvc-4.2.4依赖spring-beans-4.2.4spring-aop依赖spring-beans-5.0.2,但是发现spring-beans-4.2.4加入到了工程中,而我们希望spring-beans-5.0.2加入工程,这就造成了依赖冲突

  • 解决依赖冲突

    1. 使用Maven提供的依赖调解原则

      • 第一声明者优先原则:根据坐标导入顺序来确定最终使用那个传递过来的依赖
      • 路径近者优先原则:在pom文件中定义依赖,以路径近者为准,在上述情况中,spring-mvcspring-aop都会传递过来spring-beans,如果直接在pom中定义spring-beans,那么项目就不会使用其他依赖传来spring-beans,因为自己直接在pom中定义spring-beans要比其他依赖传递过来的路径要近
    2. 排除依赖

      使用exclusions标签将传递过来的依赖排除出去

      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>5.2.9.RELEASE</version>
        <!--排除依赖-->
        <exclusions>
          <exclusion>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
    3. 锁定版本

      采用直接锁定版本的方法确定依赖jar包的版本,版本锁定后则不考虑依赖的声明顺序或依赖的路径,以锁定的版本为准添加到工程中。

      步骤:

      1. dependencyManagement标签中锁定依赖的版本

      2. dependencies标签中声明需要导入的maven坐标

        <!--依赖jar包版本锁定-->
        <dependencyManagement>
          <dependencies>
            <dependency>
              <groupId>org.springframework</groupId>
              <artifactId>spring-beans</artifactId>
              <version>5.2.9.RELEASE</version>
            </dependency>
          </dependencies>
        </dependencyManagement>
        <dependencies>
          <!--
            仅需写jar包的<groupId>和<artifactId>两个标签
            不需要写<version>,因为在上方已经锁定了版本
          -->
          <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
          </dependency>
        </dependencies>

Maven项目构建

  1. 创建Maven Web项目
  2. 配置pom.xml
  3. 实现Spring+MyBatis整合
    • 创建POJO类
    • 持久层DAO接口编写
    • Mapper映射文件编写
    • 业务层Service编写
    • 配置applicationContext.xml
  4. 加入SpringMVC相关配置
    • 在Web.xml配置前端控制器
    • 配置spring-mvc.xml
    • 配置Controller层
    • 配置JSP界面

分模块构建Maven工程

Maven工程拆分为多个模块

常见的拆分方式:

  • 业务模块进行拆分,例如:用户模块、订单模块、购物车
  • 来拆,例如:持久层、业务层、表现层

无论哪种拆分方式都会提供一个父工程,将一些公共的代码和配置提取到父工程中进行统一的管理和配置

Maven工程的继承

子工程继承父工程后,就可以使用在父工程中引入的依赖,目的是消除重复代码

父工程的打包方式必须为pom

<groupId>cc.sgee</groupId>
<artifactId>Parent</artifactId>
<version>1.0-SNAPSHOT</version>
<!--父工程打包方式必须为pom-->
<packaging>pom</packaging>

子工程在pom.xml文件中通过parent标签进行父工程的继承

image-20201010194927435

image-20201010195026499

Maven工程的聚合

在maven工程pom.xml文件中可以使用<modules>标签将其他maven工程聚合到一起,聚合的目的是为了进行统一操作

<!--Parent的pom.xml-->
<!--聚合其他Maven工程-->
<modules>
    <module>Son</module>
    <module>../ssm</module>
    <module>../Maven-SSM</module>
</modules>

在执行cleanpackage命令后会将所有的都打包

Last modification:October 18th, 2020 at 09:36 am
如果觉得我的文章对你有用,请随意赞赏