springboot maven父子模块+聚合

最近做一个项目用到了maven的父子模块这样的一个结构啊,这个结构的好处呢就是复用了,类似于java的继承了,子模块继承了父模块的依赖等,既然我们又使用了父子模块那么我们的打包方式也是不一样的,不能在各个模块中打包package或者install而是在父模块中进行打包。

创建父子模块

我们这里的项目结构是这样的,MyBlog-system是整个maven项目的根目录,它是不需要src这个目录的直接删掉.

父模块.pom 这里只需要用<dependencyManagement />指定相应的版本,这个dependencyManagement仅仅只是代表了指定版本并没有导入依赖
代码

  <?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <!--父模块-->
    <groupId>com.mrs</groupId>
    <artifactId>MyBlog-system</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>
    <modules>
        <module>mrs-framework</module>
        <module>mrs-admin</module>
        <module>mrs-blog</module>
    </modules>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <java.version>1.8</java.version>
    </properties>


    <!--指定依赖版本  注意!!!(这里只是指定版本并没有导入)-->
    <dependencyManagement>
        <dependencies>
            <!-- SpringBoot的依赖配置-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>2.5.0</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!--fastjson依赖-->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>fastjson</artifactId>
                <version>1.2.33</version>
            </dependency>
            <!--jwt依赖-->
            <dependency>
                <groupId>io.jsonwebtoken</groupId>
                <artifactId>jjwt</artifactId>
                <version>0.9.0</version>
            </dependency>
            <!--mybatisPlus依赖-->
            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus-boot-starter</artifactId>
                <version>3.4.3</version>
            </dependency>

            <!--阿里云OSS-->
            <dependency>
                <groupId>com.aliyun.oss</groupId>
                <artifactId>aliyun-sdk-oss</artifactId>
                <version>3.10.2</version>
            </dependency>


            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>easyexcel</artifactId>
                <version>3.0.5</version>
            </dependency>

            <dependency>
                <groupId>io.springfox</groupId>
                <artifactId>springfox-swagger2</artifactId>
                <version>2.9.2</version>
            </dependency>
            <dependency>
                <groupId>io.springfox</groupId>
                <artifactId>springfox-swagger-ui</artifactId>
                <version>2.9.2</version>
            </dependency>
        </dependencies>
    </dependencyManagement>



</project>

创建公共的模块

这里创建了三个子模块,mrs.framework是公共的模块,所有的模块都可以使用它的依赖,也是为了复用,因为父模块只是指定了版本并没有导入依赖,所有我们在公共的模块还是需要导入依赖的。

代码

  <?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>MyBlog-system</artifactId>
        <groupId>com.mrs</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <!--公共子模块-->
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.mrs</groupId>
    <artifactId>mrs-framework</artifactId>

    <!--导入依赖包,版本依赖于父模块-->
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--lombk-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <!--junit-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!--SpringSecurity启动器-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>
        <!--redis依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
        <!--fastjson依赖-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
        </dependency>
        <!--jwt依赖-->
        <dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt</artifactId>
        </dependency>
        <!--mybatisPlus依赖-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
        </dependency>
        <!--mysql数据库驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

        <!--阿里云OSS-->
        <dependency>
            <groupId>com.aliyun.oss</groupId>
            <artifactId>aliyun-sdk-oss</artifactId>
        </dependency>

        <!--AOP-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
        </dependency>

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>easyexcel</artifactId>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
        </dependency>

    </dependencies>


</project>

这里值得注意的是:当你创建了一个子模块时,你的父模块的<model>是自动导入的所以你是不用自己写的

创建第二个子模块

这里的第二个子模块是使用公共的模块mrs-framework,只需要引入依赖即可使用所有公共模块的依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>MyBlog-system</artifactId>
        <groupId>com.mrs</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <!--博客前台模块sangeng-blog-->
    <artifactId>mrs-blog</artifactId>

    <dependencies>
        <dependency>
            <groupId>com.mrs</groupId>
            <artifactId>mrs-framework</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>

    </dependencies>

</project>

第三个子模块

和第二个子模块同理,同样是使用了公共模块的依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>MyBlog-system</artifactId>
        <groupId>com.mrs</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <!--博客后台模块sangeng-admin-->
    <artifactId>mrs-admin</artifactId>

    <dependencies>
        <dependency>
            <groupId>com.mrs</groupId>
            <artifactId>mrs-framework</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>

    </dependencies>
</project>


可以看到也是成功了使用了公共模块的所有依赖

实战演练

由于重复的代码很多,所以我们把所有公共的代码放到公共模块中,使用的话,就在当前工程中直接注入即可,因为继承了公共模块的所有东西

这里需要注意的是如果出现问题呢,打个比方:我在公共模块中加了几行代码,但是其他模块没有反应过来,这里就需要在整个maven的父模块中install一下,即可解决问题。

posted @ 2022-08-05 23:14  长情c  阅读(1062)  评论(0)    收藏  举报