Springboot多模塊配置詳細教程
這兩天參考了下若依大神的後臺管理項目,感覺程序的健壯性是真的強大,本人佩服的五體投地,很多程序設計技巧規範非常值得我去學習,其中第一個便是Springboot的多模塊化配置,也正好項目中需要,所以特地學習一下,但是實際操作中遇到了很多問題,特此記錄一下。
進行多模塊配置的好處:maven多模塊項目通常由一個父模塊和若干個子模塊構成,每個模塊都對應着一個pom.xml。它們之間通過繼承和聚合(也稱作多模塊)相互關聯。多模塊適用於一些比較大的項目,通過合理的模塊拆分,實現代碼的複用,便於維護和管理。
在開始動手之前,我們先捋一捋每個模塊的作用,清楚需求做事纔有目的。之後再說如何創建:
首先,如上圖所示,我這裏分了四個子模塊和一個父模塊。
其中ww_system模塊主要放entity、service、serviceImpl、mapper等文件。
ww_common主要放一些公共的工具類,
ww_blog是我的前臺controller控制器
ww_admin 是系統的web啓動入口,包括系統後臺controller都在這。是整個系統啓動的入口。
有心的朋友可以再單獨把service也單獨抽出來做一個模塊,不過我覺得沒有必要,用了mybatisplus之後service和mapper就很少寫了。
如何創建?
1,創建父模塊
父模塊的創建和平常我們創建Springboot項目沒法不同,一步一步來就行了,不過既然是父模塊,那麼它顯然是不需要src目錄的,所以創建後直接刪掉它就行。其他的東西愛刪不刪,留下pom文件就行。
2,創建子模塊。
創建子模塊的時候不要直接在左上角new ->project來創建。要選擇我們剛創建好的父模塊項目,在它上面右擊創建new module。
然後一直下一步就行,這裏還沒有什麼要注意的地方,按照這種方式在父模塊上右鍵創建其餘的另外三個子模塊。
3,重點:配置依賴
都創建好之後就是重點了,要配置我們幾個模塊之間的關聯關係,
大致思路就是:所有的子模塊都繼承父模塊
ww_admin和ww_blog兩個帶控制器的模塊要引用ww_system和ww_common公共模塊。
公共模塊ww_common不依賴任何模塊,只補充它所需要的jar包座標就行
然後,父模塊pom中不需要配置build打包配置
父模塊pom文件內容:
注意模塊引用和modules標籤!!!!
<?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>
<groupId>com.macw</groupId>
<artifactId>wwblog</artifactId>
<version>1.0.0</version>
<name>wwblog</name>
<url>http://www.henaumcw.top</url>
<description>馬超偉●個人博客系統</description>
<properties>
<java.version>1.8</java.version>
<macw.version>1.0.0</macw.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<shiro.version>1.4.2</shiro.version>
<thymeleaf.extras.shiro.version>2.0.0</thymeleaf.extras.shiro.version>
<druid.version>1.1.14</druid.version>
</properties>
<modules>
<module>ww_admin</module>
<module>ww_blog</module>
<module>ww_system</module>
<module>ww_common</module>
</modules>
<packaging>pom</packaging>
<dependencyManagement>
<dependencies>
<!-- SpringBoot的依賴配置-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.2.2.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--thymeleaf依賴-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
<version>2.2.2.RELEASE</version>
</dependency>
<!--阿里數據庫連接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>${druid.version}</version>
</dependency>
<!-- 阿里JSON解析器 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>${fastjson.version}</version>
</dependency>
<!--系統模塊-->
<dependency>
<groupId>com.macw</groupId>
<artifactId>ww_system</artifactId>
<version>${macw.version}</version>
</dependency>
<!--博客前臺模塊-->
<dependency>
<groupId>com.macw</groupId>
<artifactId>ww_blog</artifactId>
<version>${macw.version}</version>
</dependency>
<!--系統後臺入口模塊-->
<dependency>
<groupId>com.macw</groupId>
<artifactId>ww_admin</artifactId>
<version>${macw.version}</version>
</dependency>
<!--公共模塊-->
<dependency>
<groupId>com.macw</groupId>
<artifactId>ww_common</artifactId>
<version>${macw.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<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>
<encoding>${project.build.sourceEncoding}</encoding>
</configuration>
</plugin>
</plugins>
</build>
<!--配置阿里雲國內鏡像-->
<repositories>
<repository>
<id>public</id>
<name>aliyun nexus</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<releases>
<enabled>true</enabled>
</releases>
</repository>
</repositories>
</project>
ww_system:pom文件內容:
注意parent標籤和模塊引用
<?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>
<artifactId>wwblog</artifactId>
<groupId>com.macw</groupId>
<version>1.0.0</version>
</parent>
<groupId>com.macw</groupId>
<artifactId>ww_system</artifactId>
<version>1.0.0</version>
<name>ww_system</name>
<description>系統模塊</description>
<dependencies>
<!-- Mysql驅動包 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- 通用工具-->
<dependency>
<groupId>com.macw</groupId>
<artifactId>ww_common</artifactId>
</dependency>
<!--Mybatis plus-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.3.0</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-extension</artifactId>
<version>3.3.0</version>
</dependency>
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.28</version>
</dependency>
</dependencies>
</project>
ww_common模塊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>
<parent>
<artifactId>wwblog</artifactId>
<groupId>com.macw</groupId>
<version>1.0.0</version>
</parent>
<groupId>com.macw</groupId>
<artifactId>ww_common</artifactId>
<version>1.0.0</version>
<name>ww_common</name>
<description>公共模塊</description>
<dependencies>
<!-- Spring框架基本的核心工具 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
</dependency>
<!-- SpringWeb模塊 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombo.version}</version>
</dependency>
</dependencies>
</project>
ww_admin模塊pom文件內容:
注意這裏的模塊引用和build標籤內容
<?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>
<artifactId>wwblog</artifactId>
<groupId>com.macw</groupId>
<version>1.0.0</version>
</parent>
<groupId>com.macw</groupId>
<artifactId>ww_admin</artifactId>
<version>1.0.0</version>
<name>ww_admin</name>
<packaging>jar</packaging>
<description>系統後臺●總後臺web服務入口模塊</description>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- SpringBoot集成thymeleaf模板 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<!-- spring-boot-devtools -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional> <!-- 表示依賴不會傳遞 -->
</dependency>
<!--公共模塊-->
<dependency>
<groupId>com.macw</groupId>
<artifactId>ww_common</artifactId>
</dependency>
<!--博客前臺-->
<dependency>
<groupId>com.macw</groupId>
<artifactId>ww_blog</artifactId>
</dependency>
<!--系統模塊-->
<dependency>
<groupId>com.macw</groupId>
<artifactId>ww_system</artifactId>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.3.0</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.2.2.RELEASE</version>
<configuration>
<fork>true</fork> <!-- 如果沒有該配置,devtools不會生效 -->
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
<finalName>${project.artifactId}</finalName>
</build>
</project>
4 啓動入口配置
啓動入口只在ww_admin下配置Application啓動類就行了,其他模塊下不需要。
需要注意的是啓動類一定要放在模塊的根目錄下,
我之前就是放在了模塊目錄下然後就導致了bean注入失敗等的許多錯誤,需要加上@ComponentScan等好幾個來進行包掃描,及其麻煩
所以最好的就是放在根目錄下,如圖所示:
如果遇到bean註釋失敗的錯誤,那麼別問其他,就去找你的包掃描吧,肯定是路徑的問題。我就在這裏栽了好久好久。
添加控制器和連接池之後的目錄大致是這樣的
由於篇幅限制上面pom文件中刪掉了很多與這篇文章講解無用的依賴。如果報錯或無法啓動請參考本項目源碼:https://gitee.com/macw/wwblog.git
今天先更新到這,其他有問題閒來再更新