欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(shí)間:2023年05月15日 10:43:26   作者:馬稱(chēng)同  
本文主要介紹了IDEA創(chuàng)建SpringBoot父子Module項(xiàng)目的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

前言

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

  • 創(chuàng)建 SpringBoot 父子模塊項(xiàng)目
  • Docker 安裝 Nacos Server 端
  • Docker 安裝 RocketMQ 端

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

如果將 SpringBoot 框架用作與單體項(xiàng)目,可能不存在多模塊的情況

但是并不代表沒(méi)有,因?yàn)楦缸幽K并不局限于微服務(wù),單體項(xiàng)目也可以進(jìn)行明確的職責(zé)劃分

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

  • 抽象定義公共代碼及Util封裝進(jìn)行引用
  • 業(yè)務(wù)代碼進(jìn)行單獨(dú)定義模塊
  • 數(shù)據(jù)庫(kù)等DB操作相關(guān)抽離單獨(dú)模塊
  • 提供外部平臺(tái)調(diào)取的接口單獨(dú)定義模塊

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

比較經(jīng)典的就是 Dubbo 將接口 API 進(jìn)行抽離提供生產(chǎn)者接口,打?yàn)?Jar 包供消費(fèi)端調(diào)用

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

在這里假設(shè)讀者小伙伴已經(jīng) 掌握了什么是 SpringBoot 概念

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

  • 電腦: McaBook Pro
  • 創(chuàng)建項(xiàng)目工具: IDEA 2019.3.4
  • JDK 版本: 還能再堅(jiān)持20年的 JDK8
  • Maven版本: 3.5.4

2. 創(chuàng)建 SpringBoot 項(xiàng)目

1)首先打開(kāi) IDEA 工具,點(diǎn)擊 + Create New Project

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

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

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

Group: 項(xiàng)目組織唯一的標(biāo)識(shí)符,實(shí)際對(duì)應(yīng) Java 的包的結(jié)構(gòu),是 main 目錄里 Java 的目錄結(jié)構(gòu)

Group 也就是 groupId,分為多個(gè)段;一般情況下 第一段為域,第二段為公司,第三段為項(xiàng)目名稱(chēng)

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

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

Artifact: 項(xiàng)目的唯一的標(biāo)識(shí)符,實(shí)際對(duì)應(yīng)項(xiàng)目的名稱(chēng),就是項(xiàng)目根目錄的名稱(chēng)

Artifact 即為 artifactId,還是以 Nacos 舉例,因?yàn)樽罱诳此?/p>

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

Type: 分為四種不同的類(lèi)型,日常我們選擇默認(rèn)第一條就行,也就是 Maven Project

Language: 開(kāi)發(fā)語(yǔ)言的話自然就是默認(rèn)的 Java

Packaging: 打包方式,分為 War 包 和 Jar 包,這里選擇 Jar 包

Java Version: 選擇 Java 的一個(gè)版本,再堅(jiān)持 20 年的 JDK 1.8

Version: 當(dāng)前項(xiàng)目的一個(gè)版本,SNAPSHOT 為快照的意思

開(kāi)發(fā)時(shí)一般使用此類(lèi)型,因?yàn)閷?duì)于 Maven 倉(cāng)庫(kù)的同步較為友好,有不同緯度的同步選擇

Name: 定義項(xiàng)目名稱(chēng)

Description: 定義項(xiàng)目描述信息,幫助別人更好的了解項(xiàng)目

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

最終定義項(xiàng)目選項(xiàng)及配置名稱(chēng)如下,點(diǎn)擊 Next 按鈕繼續(xù)進(jìn)行

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

這里選擇的 SpringBoot 版本是 2.2.10,選擇了 Spring Web 當(dāng)作 Maven 依賴項(xiàng)

后續(xù)會(huì)使用發(fā)布 Web 測(cè)試項(xiàng)目整體是否成功,接下來(lái)點(diǎn)擊 Next 繼續(xù)進(jìn)行下一步

5)這里需要確定項(xiàng)目名稱(chēng)以及項(xiàng)目的存放地址,確認(rèn)無(wú)誤點(diǎn)擊 Finish

6)一個(gè)標(biāo)準(zhǔn)的 SpringBoot 項(xiàng)目就產(chǎn)生了

3. 構(gòu)建子 Module

1)Mac 電腦是點(diǎn)擊菜單欄中 File -> New -> Module,Windos 中可能會(huì)有一點(diǎn)差異

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

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

4)配置可按照需求進(jìn)行選擇,因?yàn)椴煌?Module 需要引用不同的 Pom 依賴,后面會(huì)與 Parent 保持一個(gè)交互

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

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

4. 建立父子 Module 依賴

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

  • 修改 Parent 項(xiàng)目 Pom.xml 的 packaging 標(biāo)簽打包方式為 pom
  • 修改 Module 項(xiàng)目 Pom.xml 文件依賴 Parent 項(xiàng)目
  • 刪除不必要文件并梳理 Pom.xml 依賴上下級(jí)關(guān)系

4.1 修改 Parent 項(xiàng)目 packaging

打開(kāi) Parent 項(xiàng)目的根 Pom.xml 文件,新增下方代碼

<packaging>pom</packaging>
<modules>
    <module>bootdemo-remote-api</module>
</modules>

packaging 包含三個(gè)值 Jar、War、Pom,默認(rèn) Jar的方式

首先來(lái)解釋下 packaging 為 Pom 的意思,宏觀而言即沒(méi)有代碼需要測(cè)試或者編譯,也沒(méi)有資源需要處理

  • Jar: 內(nèi)部調(diào)用或作為服務(wù)進(jìn)行發(fā)布使用
  • War: 需要部署的項(xiàng)目
  • Pom: 寓意為一個(gè)父級(jí)項(xiàng)目,一般作為項(xiàng)目聚合和依賴傳遞使用

modules 代表了 Parent 項(xiàng)目下的子 Module,體現(xiàn)了聚合的思想

這里把 Parent 項(xiàng)目的 Pom.xml 配置復(fù)制出來(lái),幫助大家后續(xù)排查問(wèn)題

<?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 父子模塊項(xiàng)目</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 的作用是運(yùn)行 mvn package 時(shí)會(huì)將項(xiàng)目打包為可運(yùn)行的 jar 包,java -jar 運(yùn)行即可

如果不加這個(gè) plugins,java -jar xxx.jar 會(huì)報(bào)出如下錯(cuò)誤

xxx/target/bootdemo-remote-api-0.0.1-SNAPSHOT.jar中沒(méi)有主清單屬性

4.2 修改 Module Pom.xml 信息

創(chuàng)建后的 Module 項(xiàng)目的 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 項(xiàng)目</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
</project>

4.3 刪除不必要文件

刪除 bootdemo-parent 項(xiàng)目下 src 包,因?yàn)?bootdemo-parent 作為聚合型項(xiàng)目,不會(huì)產(chǎn)生業(yè)務(wù)數(shù)據(jù)以及相關(guān)配置

另外說(shuō)一下 dependenciesdependencyManagement 標(biāo)簽做一個(gè)講解

dependencies

如果 Parent 項(xiàng)目中使用 dependencies 標(biāo)簽,標(biāo)簽內(nèi)的依賴默認(rèn)傳遞子 Module,不用子 Module 進(jìn)行顯示書(shū)寫(xiě)依賴

dependencyManagement

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

如果子 Module 依賴 Parent 項(xiàng)目中 dependencyManagement 標(biāo)簽內(nèi)的 pom 依賴,需要顯示在子 Module 的 pom 文件中進(jìn)行書(shū)寫(xiě)

5. 項(xiàng)目繼承關(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項(xiàng)目-->
        <dependency>
            <groupId>cn.machen.bootdemo</groupId>
            <artifactId>bootdemo-remote-api</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
    </dependencies>
</project>

通過(guò)繼承關(guān)系的設(shè)置,bootdemo-remote-api 中的代碼就可以被 bootdemo-biz Module 項(xiàng)目進(jìn)行引用

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

在 Parent 項(xiàng)目 Pom.xml dependencies 標(biāo)簽中定義了 spring-boot-starter-web 依賴,直接使用 web 相關(guān)內(nèi)容即可

我們?cè)?bootdemo-biz 中創(chuàng)建 Controller 控制器

@RestController
public class DemoController {
    @GetMapping("/echo/{name}")
    public String sayHello(@PathVariable("name") String name) {
        return "Hello World " + name;
    }
}

啟動(dòng)后端項(xiàng)目成功后,瀏覽器輸入 http://localhost:8080/echo/mahua 請(qǐng)求后端服務(wù)

到此這篇關(guān)于IDEA創(chuàng)建SpringBoot父子Module項(xiàng)目的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)IDEA 創(chuàng)建SpringBoot父子項(xiàng)目?jī)?nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 在Springboot中Mybatis與Mybatis-plus的區(qū)別詳解

    在Springboot中Mybatis與Mybatis-plus的區(qū)別詳解

    MyBatis是一個(gè)優(yōu)秀的持久層框架,它對(duì)JDBC的操作數(shù)據(jù)庫(kù)的過(guò)程進(jìn)行封裝,MyBatisPlus (簡(jiǎn)稱(chēng) MP)是一個(gè) MyBatis的增強(qiáng)工具,在 MyBatis 的基礎(chǔ)上只做增強(qiáng)不做改變,為簡(jiǎn)化開(kāi)發(fā)、提高效率而生,本文將給大家介紹了在Springboot中Mybatis與Mybatis-plus的區(qū)別
    2023-12-12
  • java數(shù)據(jù)結(jié)構(gòu)與算法之noDups去除重復(fù)項(xiàng)算法示例

    java數(shù)據(jù)結(jié)構(gòu)與算法之noDups去除重復(fù)項(xiàng)算法示例

    這篇文章主要介紹了java數(shù)據(jù)結(jié)構(gòu)與算法之noDups去除重復(fù)項(xiàng)算法實(shí)現(xiàn)技巧,程序代碼非常簡(jiǎn)單,關(guān)鍵在于循環(huán)與判定,需要的朋友可以參考下
    2016-08-08
  • Java性能調(diào)優(yōu)及排查方式

    Java性能調(diào)優(yōu)及排查方式

    這篇文章主要介紹了Java性能調(diào)優(yōu)及排查方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • 關(guān)于ResponseEntity類(lèi)和HttpEntity及跨平臺(tái)路徑問(wèn)題

    關(guān)于ResponseEntity類(lèi)和HttpEntity及跨平臺(tái)路徑問(wèn)題

    這篇文章主要介紹了關(guān)于ResponseEntity類(lèi)和HttpEntity及跨平臺(tái)路徑問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • 小程序與后端Java接口交互實(shí)現(xiàn)HelloWorld入門(mén)

    小程序與后端Java接口交互實(shí)現(xiàn)HelloWorld入門(mén)

    本文主要介紹了小程序與后端Java接口交互實(shí)現(xiàn)HelloWorld入門(mén) ,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-07-07
  • SpringBoot自定義Banner使用詳解

    SpringBoot自定義Banner使用詳解

    這篇文章主要介紹了SpringBoot自定義Banner使用詳解,啟動(dòng) Spring Boot 時(shí),幾乎總是能在控制臺(tái)上方看到如下橫幅,這個(gè)也叫字符畫(huà)、英文ASCII藝術(shù)字,這就是banner,我們來(lái)看一下如何使用,需要的朋友可以參考下
    2024-01-01
  • Spring boot通過(guò)切面,實(shí)現(xiàn)超靈活的注解式數(shù)據(jù)校驗(yàn)過(guò)程

    Spring boot通過(guò)切面,實(shí)現(xiàn)超靈活的注解式數(shù)據(jù)校驗(yàn)過(guò)程

    這篇文章主要介紹了Spring boot通過(guò)切面,實(shí)現(xiàn)超靈活的注解式數(shù)據(jù)校驗(yàn)過(guò)程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • jdk動(dòng)態(tài)代理使用實(shí)例詳解

    jdk動(dòng)態(tài)代理使用實(shí)例詳解

    JDK動(dòng)態(tài)代理是代理模式的一種實(shí)現(xiàn)方式,因?yàn)樗腔诮涌趤?lái)做代理的,所以也常被稱(chēng)為接口代理,下面這篇文章主要給大家介紹了關(guān)于jdk動(dòng)態(tài)代理使用的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-06-06
  • Java應(yīng)用程序開(kāi)發(fā)學(xué)習(xí)之static關(guān)鍵字應(yīng)用

    Java應(yīng)用程序開(kāi)發(fā)學(xué)習(xí)之static關(guān)鍵字應(yīng)用

    今天小編就為大家分享一篇關(guān)于Java應(yīng)用程序開(kāi)發(fā)學(xué)習(xí)之static關(guān)鍵字應(yīng)用,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2018-12-12
  • 如何基于springcloud模擬RPC調(diào)用(Feign)

    如何基于springcloud模擬RPC調(diào)用(Feign)

    這篇文章主要介紹了如何基于springcloud模擬RPC調(diào)用(Feign),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04

最新評(píng)論