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)這里就是重復(fù)上述在創(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 配置復(fù)制出來,幫助大家后續(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)文章
在Springboot中Mybatis與Mybatis-plus的區(qū)別詳解
MyBatis是一個優(yōu)秀的持久層框架,它對JDBC的操作數(shù)據(jù)庫的過程進行封裝,MyBatisPlus (簡稱 MP)是一個 MyBatis的增強工具,在 MyBatis 的基礎(chǔ)上只做增強不做改變,為簡化開發(fā)、提高效率而生,本文將給大家介紹了在Springboot中Mybatis與Mybatis-plus的區(qū)別2023-12-12java數(shù)據(jù)結(jié)構(gòu)與算法之noDups去除重復(fù)項算法示例
這篇文章主要介紹了java數(shù)據(jù)結(jié)構(gòu)與算法之noDups去除重復(fù)項算法實現(xiàn)技巧,程序代碼非常簡單,關(guān)鍵在于循環(huán)與判定,需要的朋友可以參考下2016-08-08關(guān)于ResponseEntity類和HttpEntity及跨平臺路徑問題
這篇文章主要介紹了關(guān)于ResponseEntity類和HttpEntity及跨平臺路徑問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-07-07小程序與后端Java接口交互實現(xiàn)HelloWorld入門
本文主要介紹了小程序與后端Java接口交互實現(xiàn)HelloWorld入門 ,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-07-07Spring boot通過切面,實現(xiàn)超靈活的注解式數(shù)據(jù)校驗過程
這篇文章主要介紹了Spring boot通過切面,實現(xiàn)超靈活的注解式數(shù)據(jù)校驗過程,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-12-12Java應(yīng)用程序開發(fā)學習之static關(guān)鍵字應(yīng)用
今天小編就為大家分享一篇關(guān)于Java應(yīng)用程序開發(fā)學習之static關(guān)鍵字應(yīng)用,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2018-12-12如何基于springcloud模擬RPC調(diào)用(Feign)
這篇文章主要介紹了如何基于springcloud模擬RPC調(diào)用(Feign),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-04-04