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

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

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

前言

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

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

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

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

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

如果是構(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,使用默認(rèn)的 SpringBoot 腳手架即可

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

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

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

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

以 Nacos 源碼進行舉例,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ù)進行

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

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

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

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

6)一個標(biāo)準(zhǔn)的 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)確認(rèn)創(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 標(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ù)進行發(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)配置

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

dependencies

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

dependencyManagement

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

如果子 Module 依賴 Parent 項目中 dependencyManagement 標(biāo)簽內(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 標(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ù)

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

相關(guān)文章

  • Spring中ApplicationContextAware的使用方法詳解

    Spring中ApplicationContextAware的使用方法詳解

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

    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)站爬蟲的實例代碼

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

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

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

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

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

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

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

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

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

    Java?BigDecimal正確用法詳解

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

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

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

    Java線程池隊列DelayQueue的使用詳解

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

最新評論

安化县| 农安县| 洪雅县| 柳河县| 托里县| 拜城县| 洪湖市| 银川市| 进贤县| 合江县| 志丹县| 娄烦县| 山阴县| 洪洞县| 左云县| 镇宁| 阿荣旗| 霍林郭勒市| 英山县| 融水| 玉树县| 罗甸县| 沅江市| 微山县| 洞口县| 九江县| 墨玉县| 桂阳县| 东港市| 波密县| 鄂尔多斯市| 分宜县| 定结县| 城口县| 深水埗区| 张北县| 横峰县| 科技| 盐源县| 镇坪县| 固安县|