1. 程式人生 > >基於maven使用IDEA搭建和部署SpringBoot多模組專案(Multi-Module)

基於maven使用IDEA搭建和部署SpringBoot多模組專案(Multi-Module)

What matters in life is not what happens to you but what you remember and how you remember it.
生命中真正重要的不是你遭遇了什麼,而是你記住了哪些事,又是如何銘記的。
——馬爾克斯《百年孤獨》

1、引言

在最近的專案開發中,為了滿足後期將專案改造成分散式專案,探索將傳統的單一工程改造成使用IntelliJ IDEA基於Maven建立多模組專案的實際開發。

2、專案結構

最終工程結構如下圖所示,聚合工程為base,base-common為通用的類module,base-core為核心業務module,base-web為控制層。
這裡寫圖片描述

3、建立過程

3.1 建立聚合工程base

(1)通過idea的Spring Initializr快速建立一個maven工程,並刪除無關的檔案,只保留pom.xml檔案:
這裡寫圖片描述
(2)修改聚合工程base的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> <!-- 專案說明:這裡作為聚合工程的父工程,修改打包為pom聚合工程 --> <groupId>cn.chunsoft</groupId> <artifactId>base</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>pom</packaging> <name>
base</name> <description>Demo project for Spring Boot</description> <!-- 繼承說明:這裡繼承SpringBoot提供的父工程 --> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.4.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <!-- 模組說明:這裡宣告多個子模組 --> <modules> <module>base-common</module> <module>base-core</module> <module>base-web</module> </modules> <!-- 版本說明:這裡統一管理依賴的版本號,為了各個子module依賴包的一致性,避免版本不一致導致衝突問題 --> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> </properties> <!--依賴說明:公共的maven庫在這裡新增,每個工程獨有的maven包,在各個子工程新增,但是版本號都是在父工程統一配置--> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <!--這裡maven外掛需要刪除,否則可能會導致install失敗--> <!--<build>--> <!--<plugins>--> <!--<plugin>--> <!--<groupId>org.springframework.boot</groupId>--> <!--<artifactId>spring-boot-maven-plugin</artifactId>--> <!--</plugin>--> <!--</plugins>--> <!--</build>--> </project>

3.2 建立子模組(module)

同樣通過Spring Initializr建立子模組:
(1)建立base-common
對著父工程右鍵 - New - Module - > 輸入 base-common
如圖所示,根據工程通用需求新建了一些包目錄:

  • annotation:註解相關,例如免登入註解等;
    • constants:常量相關;
    • enums:列舉型別資料,儘量避免魔法值;
    • exception:異常相關;
    • utils:常用工具類;
      這裡寫圖片描述
      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>cn.chunsoft</groupId>
    <artifactId>base-common</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>base-common</name>
    <description>Demo project for Spring Boot</description>

    <!-- 繼承說明:這裡繼承父工程聚合 -->
    <parent>
        <groupId>cn.chunsoft</groupId>
        <artifactId>base</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>

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

    <dependencies>
        <!--依賴說明:公共的maven庫在有的東西,這裡就不需要新增,這裡只新增在本module需要的依賴-->
    </dependencies>

    <!--這裡maven外掛需要刪除,否則可能會導致install失敗-->
    <!--<build>-->
        <!--<plugins>-->
            <!--<plugin>-->
                <!--<groupId>org.springframework.boot</groupId>-->
                <!--<artifactId>spring-boot-maven-plugin</artifactId>-->
            <!--</plugin>-->
        <!--</plugins>-->
    <!--</build>-->
</project>

(2)建立base-core
對著父工程右鍵 - New - Module - > 輸入 base-core
如圖所示,根據工程通用需求新建了一些包目錄:

  • config:所有配置相關的類;
    • filter:過濾器;
    • interceptor:攔截器;
    • mapper:mybatis生成的mapper檔案目錄;
    • pojo:實體物件集合,包括DO,VO,DTO等資料模型;
    • scheduler:排程器或定時任務;
    • service:業務service層,包括介面與其實現,可以按業務繼續分包;

這裡寫圖片描述
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>cn.chunsoft</groupId>
    <artifactId>base-core</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>base-core</name>
    <description>Demo project for Spring Boot</description>

    <!-- 繼承說明:這裡繼承父工程聚合 -->
    <parent>
        <groupId>cn.chunsoft</groupId>
        <artifactId>base</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>

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

    <dependencies>
        <!--依賴說明:公共的maven庫在有的東西,這裡就不需要新增,這裡只新增在本module需要的依賴-->
    </dependencies>

    <!--這裡maven外掛需要刪除,否則可能會導致install失敗-->
    <!--<build>-->
        <!--<plugins>-->
            <!--<plugin>-->
                <!--<groupId>org.springframework.boot</groupId>-->
                <!--<artifactId>spring-boot-maven-plugin</artifactId>-->
            <!--</plugin>-->
        <!--</plugins>-->
    <!--</build>-->
</project>

(3)建立base-web
對著父工程右鍵 - New - Module - > 輸入 base-web
如圖所示,根據工程通用需求新建了一些包目錄:

  • controller:控制層,可以按業務繼續分包;
    這裡寫圖片描述
    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>cn.chunsoft</groupId>
    <artifactId>base-web</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <!--這裡根據打包的需求配置jar包還是war包-->
    <packaging>jar</packaging>

    <name>base-web</name>
    <description>Demo project for Spring Boot</description>

    <parent>
        <groupId>cn.chunsoft</groupId>
        <artifactId>base</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>

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

    <dependencies>
        <dependency>
            <groupId>cn.chunsoft</groupId>
            <artifactId>base-core</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>cn.chunsoft</groupId>
            <artifactId>base-common</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <!--打包配置-->
    <build>
        <finalName>base</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <dependencies>
                    <dependency>
                        <groupId>org.springframework</groupId>
                        <artifactId>springloaded</artifactId>
                        <version>${springloaded.version}</version>
                    </dependency>
                </dependencies>
            </plugin>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <jvmArguments>-Dfile.encoding=UTF-8</jvmArguments>
                </configuration>
                <!-- mvn spring-boot:repackage -->
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

4、打包釋出

在 maven project側邊欄中,先點選base專案的clean,然後點選package或install進行打包;
這裡寫圖片描述

如果覺得結構上存在問題歡迎大家一起討論。