一、建立聚合父工程
1.首先使用 Spring Initializr 來快速建立好一個Maven工程。然後刪除無關的檔案,
只需保留pom.xml 檔案。
複製程式碼
然後在 pom.xml 裡面宣告該父工程包含的子模組。(其它資訊就不逐一講述了,
諸如繼承SpringBoot官方父工程以及統一依賴管理 請檢視下面的註釋說明)
注意:這裡可以不統一管理依賴的版本號,在模內部自己定義,如有引入其他模組,也要指定
版本資訊
<?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">
<!-- 基本資訊 -->
<description>SpringBoot 多模組構建示例</description>
<modelVersion>4.0.0</modelVersion>
<name>springboot-integration</name>
<packaging>pom</packaging>
<!-- 專案說明:這裡作為聚合工程的父工程 -->
<groupId>com.hehe</groupId>
<artifactId>springboot-integration</artifactId>
<version>1.0.0.RELEASE</version>
<!-- 繼承說明:這裡繼承SpringBoot提供的父工程 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.7.RELEASE</version>
<relativePath/>
</parent>
<!-- 模組說明:這裡宣告多個子模組 -->
<modules>
<module>mm-web</module>
<module>mm-service</module>
<module>mm-repo</module>
<module>mm-entity</module>
</modules>
<!-- 版本說明:這裡統一管理依賴的版本號 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.hehe</groupId>
<artifactId>mm-web</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.hehe</groupId>
<artifactId>mm-service</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.hehe</groupId>
<artifactId>mm-repo</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.hehe</groupId>
<artifactId>mm-entity</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.42</version>
</dependency>
</dependencies>
</dependencyManagement>
</project>
複製程式碼
二、建立子模組(module)
注:這裡是使用IDEA來建立子模組,使用Eclipse的小夥伴可通過
Spring Initializr 構建,然後複製去進去父工程根目錄即可。
1.對著父工程右鍵 - New - Module - > 輸入 mm-web
2.對著父工程右鍵 - New - Module - > 輸入 mm-service
3.對著父工程右鍵 - New - Module - > 輸入 mm-repo
4.對著父工程右鍵 - New - Module - > 輸入 mm-entity
1~4 步驟完成後,分別調整它們的pom.xml 以繼承上面的父工程。
注意:Artifact id和Project name保持一致,Package name設定時把_用.分開
複製程式碼
例如mm-web模組的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.hehe</groupId>
<artifactId>mm-web</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>mm-web</name>
//---------------------------------------------新增
<!-- 繼承本專案的父工程 -->
<parent>
<groupId>com.hehe</groupId>
<artifactId>springboot-integration</artifactId>
<version>1.0.0.RELEASE</version>
</parent>
//---------------------------------------------新增
<!-- Web模組相關依賴 -->
<dependencies>
<dependency>//-------------------------依賴其他模組
<groupId>com.hehe</groupId>
<artifactId>mm-service</artifactId>
</dependency>
<dependency>
<groupId>com.hehe</groupId>
<artifactId>mm-entity</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
</project>
複製程式碼
三、編寫子模組程式碼
四、運維部署(多模組打包)
1. 新增打包外掛
注意:多模組專案僅僅需要在啟動類所在的模組新增打包外掛即可!!
不要在父類新增打包外掛,因為那樣會導致全部子模組都使用
spring-boot-maven-plugin的方式來打包(例如BOOT-INF/com/hehe/xx),
而mm-web模組引入mm-xx 的jar 需要的是裸露的類檔案,即目錄格式為(/com/hehe/xx)。
複製程式碼
本案例的啟動模組是 mm-web , 只需在它的pom.xml 新增打包外掛(spring-boot-maven-plugin):
<!--多模組打包:只需在啟動類所在模組的POM檔案:指定打包外掛 -->
<build>
<plugins>
<plugin>
<!--該外掛主要用途:構建可執行的JAR -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
複製程式碼
四、總結
1.模組化程式設計參考部落格
2.對於父工程
1. 可以刪除src目錄,.mvn目錄
2. 配置要修改<packaging>jar</packaging> => <packaging>pom</packaging>
新增:
<!-- 模組說明:這裡宣告多個子模組 -->
<modules>
<module>wm-web</module>
<module>wm-service</module>
</modules>
刪除部分:
<build>
<plugins>
<!--<plugin>-->
<!--<groupId>org.springframework.boot</groupId>-->
<!--<artifactId>spring-boot-maven-plugin</artifactId>-->
<!--</plugin>-->
</plugins>
</build>
複製程式碼
3.對於子模組
替換父模組配置
<!--<parent>-->
<!--<groupId>org.springframework.boot</groupId>-->
<!--<artifactId>spring-boot-starter-parent</artifactId>-->
<!--<version>2.1.0.RELEASE</version>-->
<!--<relativePath/> <!– lookup parent from repository –>-->
<!--</parent>-->
到
<!-- 繼承本專案的父工程 -->
<parent>
<groupId>com.example</groupId>
<artifactId>module</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
設定依賴的其他模組
<!-- 繼承本專案的父工程 -->
<dependency>
<groupId>com.example</groupId>
<artifactId>wm-service</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
對於提供公共服務的模組
需要註釋:
<build>
<!--<plugins>-->
<!--<!–<plugin>–>-->
<!--<!–<groupId>org.springframework.boot</groupId>–>-->
<!--<!–<artifactId>spring-boot-maven-plugin</artifactId>–>-->
<!--<!–</plugin>–>-->
<!--</plugins>-->
</build>
對於模組間注入物件的,訪問不到的
啟動類新增:
啟動類程式碼如下:
@SpringBootApplication
@ComponentScan(basePackages = {"com.cp.springboot.web","com.cp.springboot.domain.bean"})
public class WebApplication {
public static void main(String[] args) {
SpringApplication.run(WebApplication.class, args);
}
}
設定掃描包ComponentScan
複製程式碼
1.參考部落格