国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

IDEA 搭建 Maven模塊化項(xiàng)目

這篇具有很好參考價(jià)值的文章主要介紹了IDEA 搭建 Maven模塊化項(xiàng)目。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

目錄

1.前言

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

3.項(xiàng)目搭建

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

3.2. 構(gòu)建子項(xiàng)目centerdao

3.3. 構(gòu)建子項(xiàng)目centerweb

4. 建立父子 Module 依賴

4.1 刪除不必要文件

4.2.修改 Parent 項(xiàng)目 packaging

4.3.修改子項(xiàng)目pom.xml 信息

4.4.補(bǔ)充說明

5. 項(xiàng)目繼承關(guān)系

6. 驗(yàn)證項(xiàng)目

7.異常處理?

8.結(jié)語

鳴謝


1.前言

????????為了更好地組織和管理項(xiàng)目代碼。通過將一個(gè)大型項(xiàng)目分解成多個(gè)模塊,每個(gè)模塊都可以獨(dú)立地編譯、測試和部署,從而提高項(xiàng)目的可維護(hù)性和可擴(kuò)展性。多模塊項(xiàng)目,適用于一些比較大的項(xiàng)目,通過合理的模塊拆分,實(shí)現(xiàn)代碼的復(fù)用,便于維護(hù)和管理。尤其是一些開源框架,也是采用多模塊的方式,提供插件集成,用戶可以根據(jù)需要配置指定的模塊。

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

  • 抽象定義公共代碼及工具類封裝進(jìn)行引用
  • 業(yè)務(wù)代碼進(jìn)行單獨(dú)定義模塊
  • 對(duì)外提供的接口服務(wù)單獨(dú)定義模塊
  • 不同功能系統(tǒng)不同模塊
  • ......

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

本篇文章會(huì)詳細(xì)演示如何創(chuàng)建 SpringBoot 父子模塊的項(xiàng)目,針對(duì)部分知識(shí)點(diǎn)著重講解

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

電腦:?win10

創(chuàng)建項(xiàng)目工具:?IDEA 2022.3

JDK 版本:JDK8

Maven版本:?3.6.1

3.項(xiàng)目搭建

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

1)首先打開 IDEA 工具,創(chuàng)建spring項(xiàng)目 ,點(diǎn)擊File ---->new --->?Create New Project

IDEA 搭建 Maven模塊化項(xiàng)目

2)選擇 Spring Initializr(初始化),選擇Project SDK 1.8,類型選擇maven,Java語言選擇8

IDEA 搭建 Maven模塊化項(xiàng)目

Group:?項(xiàng)目組織唯一的標(biāo)識(shí)符,實(shí)際對(duì)應(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í)符,實(shí)際對(duì)應(yīng)項(xiàng)目的名稱,就是項(xiàng)目根目錄的名稱,Artifact 即為 artifactId。

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)閷?duì)于 Maven 倉庫的同步較為友好,有不同緯度的同步選擇

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

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

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

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

這里選擇的 SpringBoot 版本是?2.7.1,jdk8對(duì)應(yīng)2.*版本,點(diǎn)擊 Next 繼續(xù)進(jìn)行創(chuàng)建項(xiàng)目

IDEA 搭建 Maven模塊化項(xiàng)目

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

IDEA 搭建 Maven模塊化項(xiàng)目

3.2. 構(gòu)建子項(xiàng)目centerdao

在父項(xiàng)目的基礎(chǔ)上直接創(chuàng)建module

1)點(diǎn)擊菜單欄中?File -> New -> Module,不同版本中可能會(huì)有一點(diǎn)差異

IDEA 搭建 Maven模塊化項(xiàng)目

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

IDEA 搭建 Maven模塊化項(xiàng)目

3)配置可按照需求進(jìn)行選擇,因?yàn)椴煌?Module 需要引用不同的 Pom 依賴,后面會(huì)與 Parent 保持一個(gè)交互,確認(rèn)創(chuàng)建信息,點(diǎn)擊?Finish?生成項(xiàng)目

IDEA 搭建 Maven模塊化項(xiàng)目

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

IDEA 搭建 Maven模塊化項(xiàng)目

3.3. 構(gòu)建子項(xiàng)目centerweb

1)創(chuàng)建步驟與上邊的centerdao一致

IDEA 搭建 Maven模塊化項(xiàng)目

?2)添加spring web依賴,web項(xiàng)目作為整個(gè)項(xiàng)目的啟動(dòng)項(xiàng)目,繼續(xù)添加代碼簡化依賴lombok

IDEA 搭建 Maven模塊化項(xiàng)目

3)最終項(xiàng)目結(jié)構(gòu)如下?

IDEA 搭建 Maven模塊化項(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
  • 刪除不必要文件并梳理 Pom.xml 依賴上下級(jí)關(guān)系
  • 需要新加一個(gè) modules 標(biāo)簽,包含所有子項(xiàng)目,將所有的子模塊都引入進(jìn)去

對(duì)于子工程中的 .xml 文件

  • 修改子項(xiàng)目Module 項(xiàng)目 pom.xml中parent 標(biāo)簽為其父工程
  • 添加打包方式為 jar
  • 刪除依賴包:繼承父工程的依賴包

4.1 刪除不必要文件

1)刪除父項(xiàng)目紅框標(biāo)注的內(nèi)容:src 文件是保存源代碼的,可是我們的多模塊的代碼存放在多個(gè)架構(gòu)層中,所以不需要這個(gè) src 來存放代碼

2)刪除除啟動(dòng)項(xiàng)目centerweb之外的啟動(dòng)文件和配置文件和啟動(dòng)類

IDEA 搭建 Maven模塊化項(xiàng)目

刪除后的項(xiàng)目結(jié)構(gòu)是這樣的:?

IDEA 搭建 Maven模塊化項(xiàng)目

4.2.修改 Parent 項(xiàng)目 packaging

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

    <!--打包方式-->
    <packaging>pom</packaging>
    <modules>
        <!-- 配置子項(xiàng)目-->
        <!-- 對(duì)應(yīng)artifactId-->
        <module>centerdao</module>
        <module>centerweb</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è)父級(jí)項(xiàng)目,一般作為項(xiàng)目聚合和依賴傳遞使用

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

這里把 父項(xiàng)目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.7.11</version>
        <relativePath/> 
    </parent>
    <groupId>com.ykx.center</groupId>
    <artifactId>centerparent</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>centerparent</name>
    <description>SpringBoot 父子模塊項(xiàng)目</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <!--打包方式-->
    <packaging>pom</packaging>
    <modules>
        <!-- 配置子項(xiàng)目-->
        <!-- 對(duì)應(yīng)artifactId-->
        <module>centerdao</module>
        <module>centerweb</module>
    </modules>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </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è)?pluginsjava -jar xxx.jar?會(huì)報(bào)出如下錯(cuò)誤

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

4.3.修改子項(xiàng)目pom.xml 信息

創(chuàng)建后的子項(xiàng)目的 Parent 信息是 SpringBoot 配置,修改后如下

	<parent>
		<groupId>com.ykx.center</groupId>
		<artifactId>centerparent</artifactId>
		<version>0.0.1-SNAPSHOT</version>
	</parent>

4.4.補(bǔ)充說明

另外說一下?dependencies?和?dependencyManagement?標(biāo)簽做一個(gè)講解

1)dependencies

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

2)dependencyManagement

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

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

例如

在父項(xiàng)目的POM.xml中配置:

<dependencyManagement>
? ? ? ? <dependencies>
? ? ? ? ? ? <dependency>
? ? ? ? ? ? ? ? <groupId>org.springframework.boot</groupId>
? ? ? ? ? ? ? ? <artifactId>spring-boot-starter-web</artifactId>
? ? ? ? ? ? ? ? <version>1.2.3.RELEASE</version>
? ? ? ? ? ? </dependency>
? ? ? ? </dependencies>
? ? </dependencyManagement>


此配置即生命了spring-boot的版本信息。

子項(xiàng)目則無需指定版本信息:

<dependency>
? ? <groupId>org.springframework.boot</groupId>
? ? <artifactId>spring-boot-starter-web</artifactId>
</dependency>

5. 項(xiàng)目繼承關(guān)系

我們按照《構(gòu)建子 Module》章節(jié)的內(nèi)容,構(gòu)建出如下所述的子 Module,如果centerweb項(xiàng)目引用centerdao項(xiàng)目

		<!--引用dao項(xiàng)目-->
		<dependency>
			<groupId>com.ykx</groupId>
			<artifactId>centerdao</artifactId>
			<version>0.0.1-SNAPSHOT</version>
		</dependency>

然后修改centenweb子 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>com.ykx.center</groupId>
		<artifactId>centerparent</artifactId>
		<version>0.0.1-SNAPSHOT</version>
	</parent>
	<groupId>com.centerweb</groupId>
	<artifactId>centerweb</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>centerweb</name>
	<description>centerweb子項(xiàng)目</description>
	<properties>
		<java.version>1.8</java.version>
		<centerdao.version>0.0.1-SNAPSHOT</centerdao.version>
	</properties>
	<dependencies>
		<!--引用dao項(xiàng)目-->
		<dependency>
			<groupId>com.ykx</groupId>
			<artifactId>centerdao</artifactId>
			<version>${centerdao.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<optional>true</optional>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot</artifactId>
		</dependency>
	</dependencies>
	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
				<configuration>
					<excludes>
						<exclude>
							<groupId>org.projectlombok</groupId>
							<artifactId>lombok</artifactId>
						</exclude>
					</excludes>
				</configuration>
			</plugin>
		</plugins>
	</build>
</project>

通過繼承關(guān)系的設(shè)置,centerdao?中的代碼就可以被?centerweb? 項(xiàng)目進(jìn)行引用

6. 驗(yàn)證項(xiàng)目

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

centerweb中創(chuàng)建 Controller 控制器

@RestController
public class DemoController {

     @RequestMapping("/ok")
    public String test() {   
        return "OK";
    }
}

啟動(dòng)項(xiàng)目

IDEA 搭建 Maven模塊化項(xiàng)目

啟動(dòng)后端項(xiàng)目成功后,使用restfultool請求接口

IDEA 搭建 Maven模塊化項(xiàng)目

7.異常處理?

如果遇到項(xiàng)目搭建后,模塊項(xiàng)目無啟動(dòng)類的情況,參考:

https://www.somode.com/softjc/43094.html

8.結(jié)語

由于作者水平有限, 希望大家能夠反饋指正文章中錯(cuò)誤不正確的地方, 感謝 ??

小伙伴的喜歡就是對(duì)我最大的支持 ?? , 希望大家能夠?點(diǎn)贊、評(píng)論、在看三連

鳴謝

[1].https://blog.csdn.net/qq_37781649/article/details/109321248文章來源地址http://www.zghlxwxcb.cn/news/detail-440167.html

到了這里,關(guān)于IDEA 搭建 Maven模塊化項(xiàng)目的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • IDEA 中搭建 Spring Boot Maven 多模塊項(xiàng)目 (父SpringBoot+子Maven)

    IDEA 中搭建 Spring Boot Maven 多模塊項(xiàng)目 (父SpringBoot+子Maven)

    [Ref] 新建一個(gè)SpringBoot項(xiàng)目 刪除無用的 .mvn 目錄、 src 目錄、 mvnw 及 mvnw.cmd 文件,最終只留 .gitignore 和 pom.xml ① 刪除 dependencies 標(biāo)簽及其中的 spring-boot-starter 和 spring-boot-starter-test 依賴,因?yàn)?Spring Boot 提供的父工程已包含,并且父 pom 原則上都是通過 dependencyManagement 標(biāo)簽管理

    2024年01月20日
    瀏覽(32)
  • 什么是模塊化?為什么要進(jìn)行模塊化開發(fā)?

    模塊化是一種軟件開發(fā)的設(shè)計(jì)模式,它將一個(gè)大型的軟件系統(tǒng)劃分成多個(gè)獨(dú)立的模塊,每個(gè)模塊都有自己的功能和接口,并且能夠與其他模塊獨(dú)立地工作。 ?先來一段八股文 模塊化開發(fā)可以帶來以下好處: 提高代碼的復(fù)用性:模塊化可以將代碼劃分成可重用的部分,降低代

    2023年04月12日
    瀏覽(32)
  • 23年,我又學(xué)習(xí)了一次amd模塊化,模塊化思想

    src/view1/index.html src/view1/main.js plugins/module.js 源碼鏈接:?https://gitee.com/littleboyck/front/tree/master/front-module 聯(lián)系方式:QQ: 1187253007

    2024年02月07日
    瀏覽(31)
  • 【前端模塊化】JS模塊化思想以及相關(guān)規(guī)范(CommonJS、ES module)

    1.模塊化概念 隨著前端應(yīng)用日趨復(fù)雜,項(xiàng)目代碼也大量膨脹,模塊化就是一種最主流的代碼組織方式, 一個(gè)模塊就是一個(gè)實(shí)現(xiàn)特定功能的文件 ,它通過把我們的復(fù)雜代碼按照功能的不同,劃分為不同的模塊單獨(dú)維護(hù)的這種方式,去提高我們的開發(fā)效率,降低維護(hù)成本。要用

    2024年02月01日
    瀏覽(42)
  • 前端進(jìn)階之——模塊化

    前端進(jìn)階之——模塊化

    ? ? ? ? 在做項(xiàng)目的時(shí)候越來越發(fā)現(xiàn)模塊化的重要性,做好模塊化開發(fā)不僅給后期的維護(hù)帶來不少好處而且大大提升項(xiàng)目開發(fā)效率,接下來整理一下模塊化相關(guān)知識(shí)吧。 封裝方法、提高代碼的復(fù)用性、可維護(hù)性和可讀性 隔離作用域,避免污染全局作用域 避免變量沖突 立即執(zhí)

    2024年02月10日
    瀏覽(93)
  • OpenHarmony模塊化編譯

    OpenHarmony模塊化編譯

    OpenHarmony版本:OpenHarmony 4.0 Release 編譯環(huán)境:WSL2 Ubuntu 18.04 平臺(tái)設(shè)備:RK3568 OpenHarmony 代碼構(gòu)建有build.sh和hb兩種方式: 下拉的4.0代碼無法直接使用hb命令 可參考搭建開發(fā)環(huán)境-安裝編譯工具 進(jìn)行hb安裝和環(huán)境配置。 在源碼目錄執(zhí)行\(zhòng)\\"hb help\\\",界面打印以下信息即表示安裝成功。 注

    2024年02月03日
    瀏覽(61)
  • js 模塊化

    模塊化主要是用來抽離公共代碼,隔離作用域,避免變量沖突等。 模塊化的整個(gè)發(fā)展歷史如下: IIFE :使用自執(zhí)行函數(shù)來編寫模塊化,特點(diǎn):在一個(gè)單獨(dú)的函數(shù)作用域中執(zhí)行代碼,避免代碼沖突。 AMD :使用 require 來編寫模塊化,特點(diǎn):依賴必須提前聲明好。 CMD :使用 seaJS

    2024年02月14日
    瀏覽(19)
  • 模塊化規(guī)范

    模塊化規(guī)范

    常用模塊化有兩種規(guī)范,commonJS和ES6 我們常遇到的使用場景是,在commonJS的模塊里需要引入ES6規(guī)范的模塊。這時(shí)就需要把ES6模塊轉(zhuǎn)譯為commonJS規(guī)范的模塊,否則報(bào)錯(cuò) 轉(zhuǎn)義工具有: Babel:Babel 是一個(gè)流行的 JavaScript 編譯器,它可以將 ES6 模塊轉(zhuǎn)譯為 CommonJS 模塊。你可以使用 Bab

    2024年02月15日
    瀏覽(26)
  • JS模塊化系統(tǒng)

    隨著 JavaScript 開發(fā)變得越來越廣泛,命名空間和依賴關(guān)系變得越來越難以處理。人們已經(jīng)開發(fā)出不同的解決方案以模塊系統(tǒng)的形式來解決這個(gè)問題。 CommonJS 是一種同步加載模塊的規(guī)范,主要用于服務(wù)器端的 Node.js 環(huán)境。 top:CommonJS 加載的是一個(gè)對(duì)象(即 module.exports 屬性),

    2024年02月19日
    瀏覽(26)
  • Nodejs三、模塊化

    Nodejs三、模塊化

    1、模塊化的基本概念 (1)模塊化是什么 模塊化 是指解決一個(gè) 復(fù)雜問題 時(shí),自頂向下逐層 把系統(tǒng)劃分成若干模塊 的過程。對(duì)于整個(gè)系統(tǒng)來說, 模塊是可組合、分解和更換的單元 。 (2)編程領(lǐng)域中的模塊化 編程領(lǐng)域中的模塊化,就是 遵守固定的規(guī)則 ,把一個(gè) 大文件 拆

    2024年02月09日
    瀏覽(25)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包