IDEA創(chuàng)建SpringBoot父子Module項目的實現(xiàn)方法

idea創(chuàng)建springboot父子module項目的實現(xiàn)方法

本文講解"idea創(chuàng)建springboot父子module項目的實現(xiàn)方法",希望能夠解決相關(guān)問題。

目錄
  • 前言

  • 1. 軟硬件環(huán)境

  • 2. 創(chuàng)建 springboot 項目

  • 3. 構(gòu)建子 module

  • 4. 建立父子 module 依賴

    • 4.1 修改 parent 項目 packaging

    • 4.2 修改 module pom.xml 信息

    • 4.3 刪除不必要文件

  • 5. 項目繼承關(guān)系

  • 6. 發(fā)布 web 服務(wù)

前言

作者正在籌備一個專題 《springcloud alibaba 源碼解析》,會在正式發(fā)布 springcloud alibaba 源碼系列文章之前,將一些準(zhǔn)備工作先做好

  • 創(chuàng)建 springboot 父子模塊項目

  • docker 安裝 nacos server 端

  • docker 安裝 rocketmq 端

  • …

本篇文章從第一步開始詳細(xì)講解如何 《創(chuàng)建 springboot 父子模塊項目》

如果將 springboot 框架用作與單體項目,可能不存在多模塊的情況

但是并不代表沒有,因為父子模塊并不局限于微服務(wù),單體項目也可以進(jìn)行明確的職責(zé)劃分

如果是構(gòu)建微服務(wù)項目,基本上會對模塊進(jìn)行明確的劃分,比如:

  • 抽象定義公共代碼及util封裝進(jìn)行引用

  • 業(yè)務(wù)代碼進(jìn)行單獨定義模塊

  • 數(shù)據(jù)庫等db操作相關(guān)抽離單獨模塊

  • 提供外部平臺調(diào)取的接口單獨定義模塊

  • …

上面的拆分也并非絕對,隨著架構(gòu)師對于項目結(jié)構(gòu)的不同理解,可能會衍生出不同的模塊

比較經(jīng)典的就是 dubbo 將接口 api 進(jìn)行抽離提供生產(chǎn)者接口,打為 jar 包供消費端調(diào)用

本篇文章也會從零到一創(chuàng)建 springboot 父子模塊的項目,演示聚合、繼承的項目特性,并針對不引人注意的知識點進(jìn)行講解

在這里假設(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

idea創(chuàng)建springboot父子module項目的實現(xiàn)方法

2)選擇 spring initializr(初始化),選擇project sdk 1.8,使用默認(rèn)的 springboot 腳手架即可

idea創(chuàng)建springboot父子module項目的實現(xiàn)方法

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

idea創(chuàng)建springboot父子module項目的實現(xiàn)方法

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

idea創(chuàng)建springboot父子module項目的實現(xiàn)方法

group: 項目組織唯一的標(biāo)識符,實際對應(yīng) java 的包的結(jié)構(gòu),是 main 目錄里 java 的目錄結(jié)構(gòu)

group 也就是 groupid,分為多個段;一般情況下 第一段為域,第二段為公司,第三段為項目名稱

以 nacos 源碼進(jìn)行舉例,group 為 com.alibaba.nacos

com 為商業(yè)組織,alibaba 為公司名稱,nacos 就是項目名稱

artifact: 項目的唯一的標(biāo)識符,實際對應(yīng)項目的名稱,就是項目根目錄的名稱

artifact 即為 artifactid,還是以 nacos 舉例,因為最近在看它~

nacos 不同功能組件的 artifactid 各不相同,比如權(quán)限相關(guān)的子模塊就是 nacos-auth,客戶端相關(guān)是 nacos-client,具體到了項目功能組件

type: 分為四種不同的類型,日常我們選擇默認(rèn)第一條就行,也就是 maven project

language: 開發(fā)語言的話自然就是默認(rèn)的 java

packaging: 打包方式,分為 war 包 和 jar 包,這里選擇 jar 包

java version: 選擇 java 的一個版本,再堅持 20 年的 jdk 1.8

version: 當(dāng)前項目的一個版本,snapshot 為快照的意思

開發(fā)時一般使用此類型,因為對于 maven 倉庫的同步較為友好,有不同緯度的同步選擇

name: 定義項目名稱

description: 定義項目描述信息,幫助別人更好的了解項目

package: 定義 main.java 目錄下的結(jié)構(gòu)

最終定義項目選項及配置名稱如下,點擊 next 按鈕繼續(xù)進(jìn)行

idea創(chuàng)建springboot父子module項目的實現(xiàn)方法

4)選擇 springboot 版本信息以及 pom.xml 文件依賴組件

這里選擇的 springboot 版本是 2.2.10,選擇了 spring web 當(dāng)作 maven 依賴項

后續(xù)會使用發(fā)布 web 測試項目整體是否成功,接下來點擊 next 繼續(xù)進(jìn)行下一步

idea創(chuàng)建springboot父子module項目的實現(xiàn)方法

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

idea創(chuàng)建springboot父子module項目的實現(xiàn)方法

6)一個標(biāo)準(zhǔn)的 springboot 項目就產(chǎn)生了

idea創(chuàng)建springboot父子module項目的實現(xiàn)方法

3. 構(gòu)建子 module

1)mac 電腦是點擊菜單欄中 file -> new -> module,windos 中可能會有一點差異

idea創(chuàng)建springboot父子module項目的實現(xiàn)方法

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

idea創(chuàng)建springboot父子module項目的實現(xiàn)方法

3)group 與 parent 項目保持一致即可,artifact 修改為 module 項目作用域名城即可

idea創(chuàng)建springboot父子module項目的實現(xiàn)方法

4)配置可按照需求進(jìn)行選擇,因為不同的 module 需要引用不同的 pom 依賴,后面會與 parent 保持一個交互

idea創(chuàng)建springboot父子module項目的實現(xiàn)方法

5)確認(rèn)創(chuàng)建信息,點擊 finish 生成項目

idea創(chuàng)建springboot父子module項目的實現(xiàn)方法

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

idea創(chuàng)建springboot父子module項目的實現(xiàn)方法

4. 建立父子 module 依賴

如果將建立的 parent 項目與后面創(chuàng)建的 module 產(chǎn)生關(guān)聯(lián),需要改動以下幾點

  • 修改 parent 項目 pom.xml 的 packaging 標(biāo)簽打包方式為 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,默認(rèn) jar的方式

首先來解釋下 packaging 為 pom 的意思,宏觀而言即沒有代碼需要測試或者編譯,也沒有資源需要處理

  • jar: 內(nèi)部調(diào)用或作為服務(wù)進(jìn)行發(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 標(biāo)簽做一個講解

dependencies

如果 parent 項目中使用 dependencies 標(biāo)簽,標(biāo)簽內(nèi)的依賴默認(rèn)傳遞子 module,不用子 module 進(jìn)行顯示書寫依賴

dependencymanagement

dependencymanagement 與dependencies 不同的是,標(biāo)簽內(nèi)的依賴不會默認(rèn)傳遞子 module,其作用只是為了統(tǒng)一版本聲明

如果子 module 依賴 parent 項目中 dependencymanagement 標(biāo)簽內(nèi)的 pom 依賴,需要顯示在子 module 的 pom 文件中進(jìn)行書寫

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 項目進(jìn)行引用

6. 發(fā)布 web 服務(wù)

在 parent 項目 pom.xml dependencies 標(biāo)簽中定義了 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ù)

idea創(chuàng)建springboot父子module項目的實現(xiàn)方法

關(guān)于 "idea創(chuàng)建springboot父子module項目的實現(xiàn)方法" 就介紹到此。希望多多支持碩編程

下一節(jié):springboot獲取項目目錄路徑的方法

java編程技術(shù)

相關(guān)文章
亚洲国产精品第一区二区,久久免费视频77,99V久久综合狠狠综合久久,国产免费久久九九免费视频