IDEA創(chuàng)建SpringBoot父子Module項目的實現(xiàn)
前言
作者正在籌備一個專題 《SpringCloud Alibaba 源碼解析》,會在正式發(fā)布 SpringCloud Alibaba 源碼系列文章之前,將一些準備工作先做好
- 創(chuàng)建 SpringBoot 父子模塊項目
- Docker 安裝 Nacos Server 端
- Docker 安裝 RocketMQ 端
- …
本篇文章從第一步開始詳細講解如何 《創(chuàng)建 SpringBoot 父子模塊項目》
如果將 SpringBoot 框架用作與單體項目,可能不存在多模塊的情況
但是并不代表沒有,因為父子模塊并不局限于微服務(wù),單體項目也可以進行明確的職責劃分
如果是構(gòu)建微服務(wù)項目,基本上會對模塊進行明確的劃分,比如:
- 抽象定義公共代碼及Util封裝進行引用
- 業(yè)務(wù)代碼進行單獨定義模塊
- 數(shù)據(jù)庫等DB操作相關(guān)抽離單獨模塊
- 提供外部平臺調(diào)取的接口單獨定義模塊
- …
上面的拆分也并非絕對,隨著架構(gòu)師對于項目結(jié)構(gòu)的不同理解,可能會衍生出不同的模塊
比較經(jīng)典的就是 Dubbo 將接口 API 進行抽離提供生產(chǎn)者接口,打為 Jar 包供消費端調(diào)用
本篇文章也會從零到一創(chuàng)建 SpringBoot 父子模塊的項目,演示聚合、繼承的項目特性,并針對不引人注意的知識點進行講解
在這里假設(shè)讀者小伙伴已經(jīng) 掌握了什么是 SpringBoot 概念
1. 軟硬件環(huán)境
- 電腦: McaBook Pro
- 創(chuàng)建項目工具: IDEA 2019.3.4
- JDK 版本: 還能再堅持20年的 JDK8
- Maven版本: 3.5.4
2. 創(chuàng)建 SpringBoot 項目
1)首先打開 IDEA 工具,點擊 + Create New Project

2)選擇 Spring Initializr(初始化),選擇Project SDK 1.8,使用默認的 SpringBoot 腳手架即可

大家可以訪問 Default 的網(wǎng)址,在這個網(wǎng)址中也可以進行 SpringBoot 項目的創(chuàng)建

3)創(chuàng)建項目詳細信息,會逐一進行講解

Group: 項目組織唯一的標識符,實際對應(yīng) Java 的包的結(jié)構(gòu),是 main 目錄里 Java 的目錄結(jié)構(gòu)
Group 也就是 groupId,分為多個段;一般情況下 第一段為域,第二段為公司,第三段為項目名稱
以 Nacos 源碼進行舉例,Group 為 com.alibaba.nacos
com 為商業(yè)組織,alibaba 為公司名稱,nacos 就是項目名稱
Artifact: 項目的唯一的標識符,實際對應(yīng)項目的名稱,就是項目根目錄的名稱
Artifact 即為 artifactId,還是以 Nacos 舉例,因為最近在看它~
Nacos 不同功能組件的 artifactId 各不相同,比如權(quán)限相關(guān)的子模塊就是 nacos-auth,客戶端相關(guān)是 nacos-client,具體到了項目功能組件
Type: 分為四種不同的類型,日常我們選擇默認第一條就行,也就是 Maven Project
Language: 開發(fā)語言的話自然就是默認的 Java
Packaging: 打包方式,分為 War 包 和 Jar 包,這里選擇 Jar 包
Java Version: 選擇 Java 的一個版本,再堅持 20 年的 JDK 1.8
Version: 當前項目的一個版本,SNAPSHOT 為快照的意思
開發(fā)時一般使用此類型,因為對于 Maven 倉庫的同步較為友好,有不同緯度的同步選擇
Name: 定義項目名稱
Description: 定義項目描述信息,幫助別人更好的了解項目
Package: 定義 main.java 目錄下的結(jié)構(gòu)
最終定義項目選項及配置名稱如下,點擊 Next 按鈕繼續(xù)進行

4)選擇 SpringBoot 版本信息以及 Pom.xml 文件依賴組件
這里選擇的 SpringBoot 版本是 2.2.10,選擇了 Spring Web 當作 Maven 依賴項
后續(xù)會使用發(fā)布 Web 測試項目整體是否成功,接下來點擊 Next 繼續(xù)進行下一步

5)這里需要確定項目名稱以及項目的存放地址,確認無誤點擊 Finish

6)一個標準的 SpringBoot 項目就產(chǎn)生了

3. 構(gòu)建子 Module
1)Mac 電腦是點擊菜單欄中 File -> New -> Module,Windos 中可能會有一點差異

2)這里就是重復上述在創(chuàng)建 SpringBoot 項目時的步驟,Next 下一步

3)Group 與 Parent 項目保持一致即可,Artifact 修改為 Module 項目作用域名城即可

4)配置可按照需求進行選擇,因為不同的 Module 需要引用不同的 Pom 依賴,后面會與 Parent 保持一個交互

5)確認創(chuàng)建信息,點擊 Finish 生成項目

6)最終結(jié)構(gòu)目錄如下,項目已成功創(chuàng)建,后續(xù)我們要修改其中的 Pom.xml 使其成為真正的父子項目

4. 建立父子 Module 依賴
如果將建立的 Parent 項目與后面創(chuàng)建的 Module 產(chǎn)生關(guān)聯(lián),需要改動以下幾點
- 修改 Parent 項目 Pom.xml 的 packaging 標簽打包方式為 pom
- 修改 Module 項目 Pom.xml 文件依賴 Parent 項目
- 刪除不必要文件并梳理 Pom.xml 依賴上下級關(guān)系
4.1 修改 Parent 項目 packaging
打開 Parent 項目的根 Pom.xml 文件,新增下方代碼
<packaging>pom</packaging>
<modules>
<module>bootdemo-remote-api</module>
</modules>packaging 包含三個值 Jar、War、Pom,默認 Jar的方式
首先來解釋下 packaging 為 Pom 的意思,宏觀而言即沒有代碼需要測試或者編譯,也沒有資源需要處理
- Jar: 內(nèi)部調(diào)用或作為服務(wù)進行發(fā)布使用
- War: 需要部署的項目
- Pom: 寓意為一個父級項目,一般作為項目聚合和依賴傳遞使用
modules 代表了 Parent 項目下的子 Module,體現(xiàn)了聚合的思想
這里把 Parent 項目的 Pom.xml 配置復制出來,幫助大家后續(xù)排查問題
<?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.10.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>cn.machen.bootdemo</groupId>
<artifactId>bootdemo-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>bootdemo-parent</name>
<description>創(chuàng)建 SpringBoot 父子模塊項目</description>
<packaging>pom</packaging>
<modules>
<module>bootdemo-remote-api</module>
<module>bootdemo-biz</module>
</modules>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</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>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>spring-boot-maven-plugin 的作用是運行 mvn package 時會將項目打包為可運行的 jar 包,java -jar 運行即可
如果不加這個 plugins,java -jar xxx.jar 會報出如下錯誤
xxx/target/bootdemo-remote-api-0.0.1-SNAPSHOT.jar中沒有主清單屬性
4.2 修改 Module Pom.xml 信息
創(chuàng)建后的 Module 項目的 Parent 信息是 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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>cn.machen.bootdemo</groupId>
<artifactId>bootdemo-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>bootdemo-remote-api</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>bootdemo-remote-api</name>
<description>SpringBoot Module 項目</description>
<properties>
<java.version>1.8</java.version>
</properties>
</project>4.3 刪除不必要文件
刪除 bootdemo-parent 項目下 src 包,因為 bootdemo-parent 作為聚合型項目,不會產(chǎn)生業(yè)務(wù)數(shù)據(jù)以及相關(guān)配置
另外說一下 dependencies 和 dependencyManagement 標簽做一個講解
dependencies
如果 Parent 項目中使用 dependencies 標簽,標簽內(nèi)的依賴默認傳遞子 Module,不用子 Module 進行顯示書寫依賴
dependencyManagement
dependencyManagement 與dependencies 不同的是,標簽內(nèi)的依賴不會默認傳遞子 Module,其作用只是為了統(tǒng)一版本聲明
如果子 Module 依賴 Parent 項目中 dependencyManagement 標簽內(nèi)的 pom 依賴,需要顯示在子 Module 的 pom 文件中進行書寫
5. 項目繼承關(guān)系
我們按照《構(gòu)建子 Module》章節(jié)的內(nèi)容,構(gòu)建出如下所述的子 Module
<groupId>cn.machen.bootdemo</groupId> <artifactId>bootdemo-biz</artifactId> <version>0.0.1-SNAPSHOT</version>
然后修改 bootdemo-biz 子 Module 的 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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>cn.machen.bootdemo</groupId>
<artifactId>bootdemo-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>bootdemo-biz</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>bootdemo-biz</name>
<description>創(chuàng)建 SpringBoot 父子模塊業(yè)務(wù) Module</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<!--繼承bootdemo-remote-api項目-->
<dependency>
<groupId>cn.machen.bootdemo</groupId>
<artifactId>bootdemo-remote-api</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
</project>通過繼承關(guān)系的設(shè)置,bootdemo-remote-api 中的代碼就可以被 bootdemo-biz Module 項目進行引用
6. 發(fā)布 WEB 服務(wù)
在 Parent 項目 Pom.xml dependencies 標簽中定義了 spring-boot-starter-web 依賴,直接使用 web 相關(guān)內(nèi)容即可
我們在 bootdemo-biz 中創(chuàng)建 Controller 控制器
@RestController
public class DemoController {
@GetMapping("/echo/{name}")
public String sayHello(@PathVariable("name") String name) {
return "Hello World " + name;
}
}啟動后端項目成功后,瀏覽器輸入 http://localhost:8080/echo/mahua 請求后端服務(wù)

到此這篇關(guān)于IDEA創(chuàng)建SpringBoot父子Module項目的實現(xiàn)的文章就介紹到這了,更多相關(guān)IDEA 創(chuàng)建SpringBoot父子項目內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Spring中ApplicationContextAware的使用方法詳解
ApplicationContextAware?通過它Spring容器會自動把上下文環(huán)境對象調(diào)用ApplicationContextAware接口中的setApplicationContext方法,這篇文章主要介紹了Spring中ApplicationContextAware的作用,需要的朋友可以參考下2023-03-03
mybatis-xml映射文件及mybatis動態(tài)sql詳解
XML映射文件的名稱與Mapper接口名稱一致,并且將XML映射文件和Mapper接口放置在相同包下(同包同名),這篇文章主要介紹了mybatis-xml映射文件及mybatis動態(tài)sql的相關(guān)知識,感興趣的朋友跟隨小編一起看看吧2024-12-12
springBoot+webMagic實現(xiàn)網(wǎng)站爬蟲的實例代碼
這篇文章主要介紹了springBoot+webMagic實現(xiàn)網(wǎng)站爬蟲的實例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-05-05
SpringBoot基于Mybatis攔截器和JSqlParser實現(xiàn)數(shù)據(jù)隔離
本文將介紹如何在 Spring Boot 項目中利用Mybatis的強大攔截器機制結(jié)合JSqlParser,一個功能豐富的 SQL 解析器,來輕松實現(xiàn)數(shù)據(jù)隔離的目標,本文根據(jù)示例展示如何根據(jù)當前的運行環(huán)境來實現(xiàn)數(shù)據(jù)隔離,需要的朋友可以參考下2024-04-04
Spring?Security實現(xiàn)添加圖片驗證功能
這篇文章主要為大家介紹了Spring?Security實現(xiàn)添加圖片驗證功能詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-01-01
在Java中將double轉(zhuǎn)換為int的操作方法
這篇文章主要介紹了在Java中將double轉(zhuǎn)換為int的操作方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-03-03

