07. Maven的模块化-项目构建

Maven模块化开发

在多人协同开发时,特别是规模较大的项目,为了方便日后的代码维护和管理,我们会将每个开发人员的工作细分到具体的功能和模块上。随着项目的扩大,模块也越来越多,后续会更加难以维护和扩展,这种情况会引入微服务架构。
当前来说,我们可以把模块划分为:

  • 统一的依赖管理(dependencies)
  • 通用的工具类(Commons)
  • 领域模型(domain)(实体类)
  • 管理后台(admin)
  • 前端视图(ui)
  • 接口模块(api)

Maven可以用groupIdartifactId来定位package来实现包依赖,而项目中的模块也是一个一个的包,也可以通过Maven来进行依赖管理,实现模块化开发。

开发流程

工程的基本目录结构

创建根项目(工程)

创建一个名为my-shop的工程,添加pom.xml文件,内容如下:

<?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.bailiang</groupId>
    <artifactId>myshop</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>pom</packaging>

    <modules>
        <module>myshop-web-dependencies</module>
        <module>myshop-web-commons</module>
        <module>myshop-web-domain</module>
        <module>myshop-web-admin</module>
        <module>myshop-web-ui</module>
        <module>myshop-web-api</module>
    </modules>
</project>

该项目称为Root项目,主要作用是管理整个工程的全部模块,当有新模块加入时需要在modules元素下配置对应的模块目录相对路径

说明:

  • packaging:节点表示本项目打包类型,因为根项目是用来管理其他项目的,所以类型是pom,代表是工程管理项目
  • modules-module:包含项目中各个模块的目录路径

创建统一的依赖管理

创建一个名为myshop-dependencies的项目。该项目的作用是统一整个工程的外部包依赖,其他项目只要继承该项目,就可以自动获得依赖包的版本等信息,从而使多个项目依赖的包可以有统一的版本。

添加pom.xml文件

<?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>

    <parent>
        <groupId>com.bailiang</groupId>
        <artifactId>myshop</artifactId>
        <version>1.0.0-SNAPSHOT</version>
        <relativePath>../pom.xml</relativePath>
    </parent>

    <artifactId>myshop-web-dependencies</artifactId>
    <packaging>pom</packaging>
</project>

说明

  • artifactId:本项目在Maven中的检索索引,必须填写正确,否则其他项目无法继承
  • parent:节点表示继承了某个项目,项目的索引和版本号由groupIdartifactIdversion指定,而relativePath指定了被继承项目的配置文件相对路径

创建依赖包管理

这里是创建包的管理,只是声明了包的索引和版本号,而不是实际下载包。当其他项目继承本项目并添加了包依赖时,才会正式下载包。

    <properties>
        <spring-version>4.3.24.RELEASE</spring-version>
    </properties>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
                <version>${spring-version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-webmvc</artifactId>
                <version>${spring-version}</version>
            </dependency>
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-api</artifactId>
                <version>1.7.26</version>
            </dependency>
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-lang3</artifactId>
                <version>3.1</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

设置工程的构建参数

    <build>
        <!-- 设置工程构建的工具和SDK版本号 -->
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.7.0</version>
                <configuration>
                    <source>${maven.compiler.source}</source>
                    <target>${maven.compiler.target}</target>
                    <encoding>${project.build.sourceEncoding}</encoding>
                    <showWarning>true</showWarning>
                </configuration>
            </plugin>
        </plugins>
        <!-- 设置工程打包jar时需要的资源目录 -->
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <excludes>
                    <exclude>**/*.java</exclude>
                </excludes>
            </resource>
            <resource>
                <directory>src/main/resoureces</directory>
            </resource>
        </resources>
    </build>

说明

  • ${maven.compiler.source}, ${maven.compiler.target}, ${project.build.sourceEncoding}中的参数默认引用在Maven的settings.xml配置文件中的profile-properties,也可以在本文件的properties中设置工程自己的参数

创建通用的工具类

创建一个名为myshop-commons的项目,添加pom.xml文件,内容如下:

<?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>

    <parent>
        <groupId>com.bailiang</groupId>
        <artifactId>myshop-web-dependencies</artifactId>
        <version>1.0.0-SNAPSHOT</version>
        <relativePath>../myshop-web-dependencies/pom.xml</relativePath>
    </parent>

    <artifactId>myshop-web-commons</artifactId>
    <packaging>jar</packaging>

    <dependencies>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
        </dependency>
    </dependencies>
</project>

说明

  • parent:继承的路径就是myshop-dependencies项目的pom.xml文件相对路径了
  • artifactId:指定本项目的索引
  • packaging:本项目是要打包为jar包
  • dependencies:这里才是正式加载第三方依赖

添加领域模型(domain)项目

该项目保存实体类
创建myshop-domain项目,添加pom.xml内容如下:

<?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>

    <parent>
        <groupId>com.bailiang</groupId>
        <artifactId>myshop-web-dependencies</artifactId>
        <version>1.0.0-SNAPSHOT</version>
        <relativePath>../myshop-web-dependencies/pom.xml</relativePath>
    </parent>

    <artifactId>myshop-web-domain</artifactId>
    <packaging>jar</packaging>
</project>

添加后台管理(admin)项目

创建myshop-web-admin项目,添加pom.xml内容如下:

<?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>

    <parent>
        <groupId>com.bailiang</groupId>
        <artifactId>myshop-web-dependencies</artifactId>
        <version>1.0.0-SNAPSHOT</version>
        <relativePath>../myshop-web-dependencies/pom.xml</relativePath>
    </parent>

    <artifactId>myshop-web-admin</artifactId>
    <packaging>war</packaging>

    <dependencies>
        <dependency>
            <groupId>com.bailiang</groupId>
            <artifactId>myshop-web-domain</artifactId>
            <version>${project.parent.version}</version>
        </dependency>
    </dependencies>
</project>

说明

  • ${project.parent.version}:通过配置可以一次修改,多次使用,避免多个地方修改版本号

创建前端(ui)项目

创建myshop-web-ui项目,添加pom.xml内容如下:

<?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>

    <parent>
        <groupId>com.bailiang</groupId>
        <artifactId>myshop-web-dependencies</artifactId>
        <version>1.0.0-SNAPSHOT</version>
        <relativePath>../myshop-web-dependencies/pom.xml</relativePath>
    </parent>

    <artifactId>myshop-web-ui</artifactId>
    <packaging>war</packaging>

    <dependencies>
        <dependency>
            <groupId>com.bailiang</groupId>
            <artifactId>myshop-web-commons</artifactId>
            <version>${project.parent.version}</version>
        </dependency>
    </dependencies>
</project>

创建WebApi项目

创建myshop-web-api项目,添加pom.xml内容如下:

<?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>

    <parent>
        <groupId>com.bailiang</groupId>
        <artifactId>myshop-web-dependencies</artifactId>
        <version>1.0.0-SNAPSHOT</version>
        <relativePath>../myshop-web-dependencies/pom.xml</relativePath>
    </parent>

    <artifactId>myshop-web-api</artifactId>
    <packaging>war</packaging>

    <dependencies>
        <dependency>
            <groupId>com.bailiang</groupId>
            <artifactId>myshop-web-commons</artifactId>
            <version>${project.parent.version}</version>
        </dependency>
    </dependencies>
</project>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值