最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

前言

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

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

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

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

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

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

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

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

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

本篇文章也會從零到一創(chuàng)建 SpringBoot 父子模塊的項(xiàng)目,演示聚合、繼承的項(xiàng)目特性,并針對不引人注意的知識點(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)首先打開 IDEA 工具,點(diǎn)擊 + Create New Project

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

開發(fā)時(shí)一般使用此類型,因?yàn)閷τ?Maven 倉庫的同步較為友好,有不同緯度的同步選擇

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

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

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

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

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

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

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

5)這里需要確定項(xiàng)目名稱以及項(xiàng)目的存放地址,確認(rèn)無誤點(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 中可能會有一點(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 依賴,后面會與 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 依賴上下級關(guān)系

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

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

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

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

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

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

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

這里把 Parent 項(xiàng)目的 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 父子模塊項(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í)會將項(xiàng)目打包為可運(yùn)行的 jar 包,java -jar 運(yùn)行即可

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

xxx/target/bootdemo-remote-api-0.0.1-SNAPSHOT.jar中沒有主清單屬性

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)目,不會產(chǎn)生業(yè)務(wù)數(shù)據(jù)以及相關(guān)配置

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

dependencies

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

dependencyManagement

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

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

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ā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)容即可

我們在 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 請求后端服務(wù)

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

相關(guān)文章

  • Spring中ApplicationContextAware的使用方法詳解

    Spring中ApplicationContextAware的使用方法詳解

    ApplicationContextAware?通過它Spring容器會自動(dòng)把上下文環(huán)境對象調(diào)用ApplicationContextAware接口中的setApplicationContext方法,這篇文章主要介紹了Spring中ApplicationContextAware的作用,需要的朋友可以參考下
    2023-03-03
  • mybatis-xml映射文件及mybatis動(dòng)態(tài)sql詳解

    mybatis-xml映射文件及mybatis動(dòng)態(tài)sql詳解

    XML映射文件的名稱與Mapper接口名稱一致,并且將XML映射文件和Mapper接口放置在相同包下(同包同名),這篇文章主要介紹了mybatis-xml映射文件及mybatis動(dòng)態(tài)sql的相關(guān)知識,感興趣的朋友跟隨小編一起看看吧
    2024-12-12
  • springBoot+webMagic實(shí)現(xiàn)網(wǎng)站爬蟲的實(shí)例代碼

    springBoot+webMagic實(shí)現(xiàn)網(wǎng)站爬蟲的實(shí)例代碼

    這篇文章主要介紹了springBoot+webMagic實(shí)現(xiàn)網(wǎng)站爬蟲的實(shí)例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • 淺析Java編程中類和對象的定義

    淺析Java編程中類和對象的定義

    下面小編就為大家?guī)硪黄獪\析Java編程中類和對象的定義。小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧,祝大家游戲愉快哦
    2016-05-05
  • SpringBoot基于Mybatis攔截器和JSqlParser實(shí)現(xiàn)數(shù)據(jù)隔離

    SpringBoot基于Mybatis攔截器和JSqlParser實(shí)現(xiàn)數(shù)據(jù)隔離

    本文將介紹如何在 Spring Boot 項(xiàng)目中利用Mybatis的強(qiáng)大攔截器機(jī)制結(jié)合JSqlParser,一個(gè)功能豐富的 SQL 解析器,來輕松實(shí)現(xiàn)數(shù)據(jù)隔離的目標(biāo),本文根據(jù)示例展示如何根據(jù)當(dāng)前的運(yùn)行環(huán)境來實(shí)現(xiàn)數(shù)據(jù)隔離,需要的朋友可以參考下
    2024-04-04
  • Spring?Security實(shí)現(xiàn)添加圖片驗(yàn)證功能

    Spring?Security實(shí)現(xiàn)添加圖片驗(yàn)證功能

    這篇文章主要為大家介紹了Spring?Security實(shí)現(xiàn)添加圖片驗(yàn)證功能詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • 在Java中將double轉(zhuǎn)換為int的操作方法

    在Java中將double轉(zhuǎn)換為int的操作方法

    這篇文章主要介紹了在Java中將double轉(zhuǎn)換為int的操作方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-03-03
  • Java?BigDecimal正確用法詳解

    Java?BigDecimal正確用法詳解

    Java在java.math包中提供的API類BigDecimal,用來對超過16位有效位的數(shù)進(jìn)行精確的運(yùn)算。雙精度浮點(diǎn)型變量double可以處理16位有效數(shù),但在實(shí)際應(yīng)用中,可能需要對更大或者更小的數(shù)進(jìn)行運(yùn)算和處理
    2022-10-10
  • 關(guān)于ArrayList初始化容量的問題

    關(guān)于ArrayList初始化容量的問題

    這篇文章主要介紹了關(guān)于ArrayList初始化容量的問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • Java線程池隊(duì)列DelayQueue的使用詳解

    Java線程池隊(duì)列DelayQueue的使用詳解

    這篇文章主要介紹了Java線程池隊(duì)列DelayQueue的使用詳解,DelayQueue顧名思義,它是個(gè)無邊界延遲隊(duì)列,它的底層是基于PriorityBlockingQueue實(shí)現(xiàn)的,該隊(duì)列中的元素都是按照過期時(shí)間順序排序的,隊(duì)列頭部放的是即將過期的元素,需要的朋友可以參考下
    2023-12-12

最新評論

永州市| 梓潼县| 盘山县| 阿拉善盟| 驻马店市| 祥云县| 九江市| 德令哈市| 台前县| 皮山县| 景泰县| 石嘴山市| 错那县| 日土县| 巩留县| 沁水县| 定远县| 扎鲁特旗| 衡阳市| 苏尼特左旗| 高密市| 习水县| 韩城市| 祥云县| 临澧县| 大田县| 镇江市| 墨竹工卡县| 抚宁县| 德阳市| 富裕县| 布尔津县| 郸城县| 屯留县| 河津市| 潮州市| 西乌珠穆沁旗| 泗水县| 楚雄市| 肃北| 阿鲁科尔沁旗|