maven多模块开发

什么是多模块

 在开发一个大型的项目的时候,通过合理的分解,把一个完整的项目分解为一个个模块进行开发。这样可以实现代码的复用,便于维护和管理。在开发springcloud项目的时候我们一般都是通过多模块进行开发的。

 示意图

捕获.JPG

 如图所示,这是一个基于springcloud项目开发的,使用的就是maven多模块开发。

 比如其中的cloud-api-commons项目就是一个通用的代码,比如说实体类代码的代码就可以当都写在一个项目中,在通过打包成jar引入到主项目中。

创建一个父工程

  1. 创建一个maven项目

捕获1.JPG

  1. 创建完毕后可以把src目录删除

 删除完毕最终结构如图所示:

捕获.JPG

  1. 修改pom文件并添加依赖
<?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>org.example</groupId>
    <artifactId>parent-project-demo</artifactId>
    <version>1.0-SNAPSHOT</version>

    <!--统一管理jar包版本-->
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <junit.version>4.12</junit.version>
        <lombok.version>1.18.10</lombok.version>
        <log4j.version>1.2.17</log4j.version>
        <mysql.version>8.0.18</mysql.version>
        <druid.version>1.1.16</druid.version>
    </properties>


    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-project-info-reports-plugin</artifactId>
                <version>3.0.0</version>
            </dependency>
            <!--spring boot 2.2.2-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>2.2.2.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!--spring cloud Hoxton.SR1-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Hoxton.SR1</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <!--spring cloud 阿里巴巴-->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2.1.0.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!--mysql-->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>${mysql.version}</version>
                <scope>runtime</scope>
            </dependency>
            <!-- druid-->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid</artifactId>
                <version>${druid.version}</version>
            </dependency>

            <!-- Mybatis plus -->
            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus-boot-starter</artifactId>
                <version>${mybatis.plus.version}</version>
            </dependency>
            <!--junit-->
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>${junit.version}</version>
            </dependency>
            <!--log4j-->
            <dependency>
                <groupId>log4j</groupId>
                <artifactId>log4j</artifactId>
                <version>${log4j.version}</version>
            </dependency>

        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>2.2.6.RELEASE</version>
            </plugin>
        </plugins>
    </build>

</project>
properties标签

 该标签定义所有依赖的版本,便于未来升级时只需要在父工程中修改版本号即可。

dependencyManagement标签

 这个标签只有在父工程中才有,它让子项目中引用一个依赖而不用显示的列出版本号。Maven会沿着父子层次向上走,直到找到一个拥有dependencyManagement元素的项目,然后它就会使用在这个dependencyManagement元素中指定的版本号。

dependencies标签

 这里才是真正放入maven坐标的地方

注意

 在父工程中定义的所有依赖都不是立即拉取的,拉取依赖只有在子项目才会发生。父工程只是定义,当子项目中用到时才会拉取。

创建一个子工程

 通过idea创建一个子工程,只需要如图所示点击model进行创建

无标题.png

 我这里创建一个springboot项目

image.png

 创建完毕我们发行父工程项目中的pom文件多出了点东西

<modules>
       <module>model-one</module>
 </modules>

 有时候它没有出现需要自己手动添加,这个就表示model-one是父项目的子工程。

 下面我们在子项目中加入pom坐标时,只要父工程中定义过版本信息,就可以在子项目中不在需要指定版本。

示例代码

https://gitee.com/cwljxf/springcloud-demo

# maven 

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×