1. 引言
傳統(tǒng)的web應(yīng)用狭莱,我們通常采用單一項(xiàng)目工程結(jié)構(gòu)。而到了分布式架構(gòu)系統(tǒng)中,尤其是微服務(wù)概念盛行的今天跌捆,這種項(xiàng)目結(jié)構(gòu)早已滿(mǎn)足不了我們的要求。比如設(shè)計(jì)一個(gè)互聯(lián)網(wǎng)電商微服務(wù)架構(gòu)系統(tǒng)象颖,往往會(huì)被拆分成多個(gè)微服務(wù)子系統(tǒng)佩厚,如前端、支付力麸、物流可款、訂單和庫(kù)存,各個(gè)子系統(tǒng)獨(dú)立部署克蚂,通過(guò)http調(diào)用闺鲸,減少耦合。
本文將探索如何使用IntelliJ IDEA基于Maven創(chuàng)建多模塊項(xiàng)目埃叭。本項(xiàng)目也是后續(xù)SpringBoot如何快速集成第三方技術(shù)系列文章的開(kāi)端項(xiàng)目摸恍,源碼將發(fā)布于github上,歡迎持續(xù)關(guān)注赤屋。
2. 項(xiàng)目結(jié)構(gòu)
這次我們搭建的多模塊項(xiàng)目主要包含
- springboot-commen?? 公共服務(wù)模塊
- springboot-swagger? Springboot集成Swagger技術(shù)模塊
- springboot-mybatis ? Springboot集成Mybatis技術(shù)模塊
公共服務(wù)組件主要存放一些通用的服務(wù)組件立镶,后續(xù)其它第三方技術(shù)系列文章的工程也將在該項(xiàng)目中以新增模塊發(fā)布。
3. 搭建部署步驟
3.1 創(chuàng)建聚合工程parent
對(duì)于這些模塊类早,我們需要聚合parent maven項(xiàng)目媚媒,統(tǒng)一管理他們,下面就來(lái)創(chuàng)建一個(gè)parent項(xiàng)目涩僻。
選擇新建的項(xiàng)目類(lèi)型為Spring Initializr缭召,快速創(chuàng)建Springboot項(xiàng)目。
根據(jù)實(shí)際要求逆日,設(shè)置項(xiàng)目屬性嵌巷。后面Next直接使用默認(rèn)選項(xiàng),關(guān)于導(dǎo)入其他依賴(lài)包室抽,我們手動(dòng)導(dǎo)入搪哪。
由于springboot-tech為聚合管理工程,并不需要src目錄坪圾,可以直接刪除晓折,然后修改聚合工程springboot-tech的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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!-- 項(xiàng)目說(shuō)明:這里作為聚合工程的父工程兽泄,修改打包為pom聚合工程 -->
<groupId>com.qinghaihu</groupId>
<artifactId>sprinboot-tech</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<name>sprinboot-tech</name>
<description>Demo project for Spring Boot Technology</description>
<!-- 繼承說(shuō)明:這里繼承SpringBoot提供的父工程 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.5.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<!-- 版本說(shuō)明:這里統(tǒng)一管理依賴(lài)的版本號(hào),為了各個(gè)子module依賴(lài)包的一致性已维,避免版本不一致導(dǎo)致沖突問(wèn)題 -->
<properties>
<java.version>1.8</java.version>
</properties>
<!--依賴(lài)說(shuō)明:公共的maven庫(kù)在這里添加,每個(gè)工程獨(dú)有的maven包已日,在各個(gè)子工程添加,但是版本號(hào)都是在父工程統(tǒng)一配置-->
<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>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<build>
<plugins>
<!-- 注意: 因?yàn)槲覀儾恍枰猻pringboot-tech是一個(gè)可運(yùn)行的項(xiàng)目栅屏,所以修改原來(lái)的打包方式為maven打包方式 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
parent項(xiàng)目建立完畢飘千,下面在此項(xiàng)目下新建我們需要的模塊堂鲜,
3.2 添加子模塊項(xiàng)目
這里需要注意一下,如果想要建立對(duì)應(yīng)項(xiàng)目下的module項(xiàng)目护奈,那么鼠標(biāo)先選中該項(xiàng)目名稱(chēng)(對(duì)照上圖)在選擇File>>new>>Module缔莲,因?yàn)樗械膎ew都是相對(duì)你選中的目錄來(lái)的。
同樣的方法霉旗,新建剩余的其它模塊痴奏,新建完成后的目錄結(jié)構(gòu)如下圖。
3.3 建立模塊關(guān)系
接下來(lái)厌秒,首先建立相互關(guān)系读拆,parent項(xiàng)目springboot-tech pom文件中配置子模塊,添加modules標(biāo)簽.
<modules>
<module>springboot-common</module>
<module>springboot-swagger</module>
<module>springboot-mybatis</module>
</modules>
修改子模塊pom文件,繼承于父模塊鸵闪。添加子模塊的其它jar包依賴(lài)檐晕,也可依賴(lài)公共服務(wù)模塊,子模塊個(gè)性化配置蚌讼。以springboot-swagger子模塊為例:
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!--<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.5.RELEASE</version>
<relativePath/>
</parent>
-->
<!--繼承父模塊parent工程-->
<parent>
<groupId>com.qinghaihu</groupId>
<artifactId>sprinboot-tech</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<groupId>com.qinghaihu</groupId>
<artifactId>springboot-swagger</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springboot-swagger</name>
<description>Demo project for Spring Boot Swagger</description>
<properties>
<!-- maven可以繼承父項(xiàng)目中的參數(shù)辟灰,所以可以刪除子模塊中定義 -->
<!--<java.version>1.8</java.version>-->
</properties>
<dependencies>
<!--maven可以繼承父項(xiàng)目中的依賴(lài),所以可以刪除子模塊中定義 -->
<!--
<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>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
-->
<!--依賴(lài)公共服務(wù)模塊-->
<dependency>
<groupId>com.qinghaihu</groupId>
<artifactId>springboot-common</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.6.1</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.6.1</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.4</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
3.4 打包發(fā)布
在 maven project側(cè)邊欄中篡石,先點(diǎn)擊parent項(xiàng)目的clean芥喇,然后點(diǎn)擊package或install進(jìn)行打包或發(fā)布。