Maven的聚合工程搭建示意

聚合工程:指的是基于Maven工程的模块化开发。它的优势是:

  1. 目录清晰,方便管理
  2. 支持分开开发(团队)
  3. 便捷且统一的依赖版本管理

在实际中我是这样去理解的(可能有误,但我觉得思想是开放的,怎么样理解有道理就行)。

项目老大发了一个任务,他先做了如下几件事:

  1. 事先搭好了工程的结构并且指定了pom文件中的依赖管理
  2. 给每个人分配了底层的任务,例如:实体类、Mapper+测试、Service层、Controller...
  3. 由于每个人的工期是不同的,可能同时负责了多项项目,所以团队合作很可能是以一个阶梯执行的。

image.png

OK,接下去我们针对前面两件事情,来学习一下聚合工程。

步骤

新建工程

新建一个空的工程,指定使用maven作为包管理工具。

image.png

进入工程后,删除src目录,因为这是一个父工程,src是作为源代码目录,这里父工程并不做代码编辑,所以直接删除。

编辑pom文件 - 统一依赖管理

主流是使用SpringBoot开发,所以可以指定一个父目录的父亲:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.3.6.RELEASE</version>
</parent>
复制代码

properties标签中指定一下我们这个工程需要依赖的版本号,这个主要也是参考spring-boot-starter-parent的写法形式去做的,有兴趣的可以点开看看spring-boot-dependencies

这里为了后续介绍一个整合工程,先引入一些基础的包,并且指定他们的版本号:

  1. mybatis-plus:数据持久层框架
  2. knife4j:接口文档框架
  3. jwt:jwt安全认证
  4. fastjson:json格式转换
<properties>
    <java.version>1.8</java.version>
    <mybatis-plus.version>3.4.1</mybatis-plus.version>
    <mysql.version>8.0.30</mysql.version>
    <knife4j.version>3.0.3</knife4j.version>
    <jwt.version>0.9.1</jwt.version>
    <fastjson.version>2.0.21</fastjson.version>
    <maven.compiler.source>8</maven.compiler.source>
    <maven.compiler.target>8</maven.compiler.target>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
复制代码

这样做的目的是,先确定这个工程依赖的包是不存在冲突的。

这样做还不够,这样做只是指定了版本号,就和定义了变量一样,为了后续的工程引入该依赖配置时不再放入版本号,我们还需要编写dependencyManagement标签。

<dependencyManagement>
    <dependencies>
        <!--mybatis-plus 持久层-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>${mybatis-plus.version}</version>
        </dependency>
        <!--mysql-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>${mysql.version}</version>
        </dependency>
        <!--knife4j-->
        <dependency>
            <groupId>com.github.xiaoymin</groupId>
            <artifactId>knife4j-spring-boot-starter</artifactId>
            <version>${knife4j.version}</version>
        </dependency>
        <!--jjwt-->
        <dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt</artifactId>
            <version>${jwt.version}</version>
        </dependency>
        <!--fastjson-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>${fastjson.version}</version>
        </dependency>
    </dependencies>
</dependencyManagement>
复制代码

这样就已经实现了后续子模块导入该依赖时不再需要指定版本号

新建模块 - 分配任务

如图依次点击

image.png

这里举一个例子,其他步骤是一样的。关键的地方就是看清楚Parent写的是父工程中对应的artifactId

image.png

验证:在父工程中可以看见一个蓝色向下的箭头:

image.png

这表示该工程下已经创建了一个独立的子模块。

然后将这些模块从低向下的工作顺序分配出去即可。子模块之间可以通过在dependencies中写入其他子模块的描述(如下),进行依赖,例如:service层依赖mapper

<dependency>
    <groupId>top.chengyunlai</groupId>
    <artifactId>mapper</artifactId>
    <version>1.0-SNAPSHOT</version>
</dependency>
复制代码

猜你喜欢

转载自juejin.im/post/7222257177187450936