架構設計-從零開始搭建gradle多模塊項目

2022-01-10 java技術大本營
開頭說兩句

小小刀博客: https://www.lixiang.red
小小刀公眾號: 程式設計師心情站
原創不易,轉載請註明出處

#項目背景
讀過小刀以前文章的小夥伴應該還記得,小刀和大家分享過,如何用thymeleaf生成mybatis的模板:
https://www.lixiang.red/articles/2019/07/23/1563857782748.html
也和大家分享過,如何去設計小刀目前負責的商品模塊:
https://www.lixiang.red/articles/2019/07/25/1564025186602.html
現在工具類有了,設計也有了,下面就要開始搭建項目了,今天小刀就和大家分享一下如何用gradle創建一個多模塊的應用

技術選型

spring-boot: java做web開發,這個差不多是基礎了
mybatis: 做javaweb開發,連資料庫大都是用的這個
redis: 做javaweb開發,緩存大都是用的這個
用的都是常用的東西,沒什麼新特色,大家對技術選型這塊,可以不考慮這麼多,隨大流就行了,想高級一點,就深入把每一部分的原理弄清楚.

gradle 簡介

為什麼選gradle沒有用maven呢 ,gradle做為新一代的構建工具,說實話,構建速度,我還真沒對比過,但就方便省事而言,gradle還是挺省事的,寫的代碼變少了,也清晰了不少,而且迭代升級超快,去年第一次接觸gradle的時候還是4.x的版本,現在都5.x了

gradle 配置多模塊項目

想要學習gradle多模塊最好的方式,就是看看spring源碼, spring 源碼就是用的gradle進行構建,小刀fork了官網的spring項目,並且新加子一個中文注釋的分支
https://github.com/weixiaodexiaoxiaodao/spring-framework 分支是:5_1_x_study
所以需要複雜構建的小夥伴可以看看spring中是怎麼寫的,但是現在簡單的構建 可以直按小刀下面的寫法, 我們一起來創建一個基本的項目,以後的項目都上課就那樣以這個為藍本進行構建

生成初始項目

初始項目的生成,我們還是選用spring官方的生成方式:
https://start.spring.io/
在這個頁面,我們可以選擇一些通用的配置, 如, maven , gradle ,jdk版本,依賴等等,這裡小刀填一個最小化的版本:

然後選生成工程,打開後,可得到一個開箱即用的工程

但是這個工程是單模塊的,我們要把他改造成多模塊的

改造成多模塊項目

改造並不麻煩, 像以前在maven工程中, 需要在主pom裡面聲明Module一樣, gradle需要在settings.gradle裡面添加名處模塊的名稱:

rootProject.name = 'market'include 'market-admin'include 'market-client'include 'market-service'include 'market-common'include 'market-business'include 'market-business-impl'

然後在對應著新建文件夾,然後把我們初始化生成項目中的文件,複製到market-admin 這個文件夾中.現在的項目結構如下圖所示:

配置全局配置項

以前在用maven時, 我們需要一個額外的setting.xml來配置maven使用的鏡像之類的,在gradle中,就不需要額外的文件了,只需要在build.gradle裡面配置即可.所以現在我們在主build.gradle中進行配置整個項目的maven倉庫的地址

配置maven倉庫的地址
allprojects {  repositories {    maven { url getMavenPublicUrl()      credentials {        username 'xxxx'        password 'xxxx'      }    }    maven { url getMavenSnapshotUrl()      credentials {        username 'xxxx'        password 'xxxx'      }    }
}}
def getMavenPublicUrl(){ def url = "http://xxxxx.xxxxx:port/repository/maven-public/"; if(project.hasProperty('BUILD_TYPE')){ if(BUILD_TYPE == "test"){ println "現在是測試環境" url = "http://xxxxx.xxxxx:8081/repository/maven-public/" } } return url}
def getMavenSnapshotUrl(){ def url = "http://xxxxx.xxxxxxx:port/repository/maven-snapshots/"; if(project.hasProperty('BUILD_TYPE')){ if(BUILD_TYPE == "test"){ println "現在是測試環境" url = "http://xxxxxx:8081/repository/maven-snapshots/" } } return url}

這裡面我們可以通過腳本來判斷當前執行構建的是什麼環境,不同的環境有不同的maven地址, 啟動構建時需要傳參:

gradle bootjar -PBUILD_TYPE=test --refresh-dependencies -info -b ${app_name}/build.gradle

配置gradle插件的地址

在settings裡面頂頭開始寫,小刀這裡是用的阿里雲公開的gradle插件地址,如果是用自己nexus服務的話,需要先在nexus上新建一個代理repo,然後代理gradle 插件地址, settings.build中再對應的地址改為nexus中新建的repo的地址

pluginManagement {  repositories {    maven { url "https://maven.aliyun.com/repository/gradle-plugin"    }  }}

模塊及功能劃分

如上面目錄結構圖所示,一般來說,這幾層都是避不可免的,對外提供web訪問的admin模塊,打包出去的client模塊, 對外提供dubbo接口的service模塊,供admin,service調用的business接口模塊,business的實現邏輯的business-impl模塊,自己項目定製化的工具類,通用的配置等等.

這裡一直有個小糾結,就是現在很多項目其實寫了接口,也只是一個實現類,並沒有說很多實現類怎麼樣, business和business-impl 實際上是一對一的關係,這裡面會有不少小夥伴選擇新建項目時,去除掉 business和 bubsiness-impl , 用一層manager來頂替接口和實現類,admin調用manager , manager調用dao. 具體怎麼選擇,可根據公司業務來選擇.

注意依賴和配置的位置

雖說現在這樣項目已經可以跑起來了,但實際上,還是有不少坑,如主build.gradle裡面不要引依賴,但是可以寫版本號.

只能在admin,service的build.gradle裡面寫springboot的插件

配置文件,只能放在admin和service的resources目錄下

類如mybatis的連接, redis的連接配置, apollo,mq 等配置,都只能放在admin/service的相關位置

最後說兩句

做到上面這些, 一個簡單的gradle多模塊化項目就搭建完成, 如果需要研究下複雜的怎麼配置,可以參考spring 源碼中的build.gradle的寫法:
https://github.com/weixiaodexiaoxiaodao/spring-framework/blob/master/build.gradle
大家在配置過程中有什麼問題歡迎隨時給小刀留言或加小刀微信一起討論:best396975802

相關焦點

  • Gradle敏捷打包,多版本,多渠道,多環境,多功能,多模塊隨心所欲
    等解決了本地基礎,我們在試著搭建一個遠程智能打包平臺(非Jenkins)。修改app名稱開發中可以在代碼架構層次中創建對應的資源名稱和代碼邏輯,修改名稱和app圖標的方式都一樣。這樣輸出的apk名字也不一樣,具體的詳細步驟不再多說。
  • 從零開始的Android新項目5 - Repository層(上) Retrofit、Repository組裝
    原文:http://blog.zhaiyifan.cn/2016/04/30/android-new-project-from-0-p5/MarkZhai從零開始系列的第5篇,很早前就挖好坑,上周末剛填完,可能有些同學周末已經看過,這裡還是推薦給大家,按例放上前4篇連結方便沒看過的同學,本系列已經接近大結局,我這邊會儘量有始有終:從零開始的Android
  • Gradle for Android入門
    廢話不多說,我們直接開始吧。今天主要介紹Android studio工具的使用,以及cradle基礎入門,使用cradle wrapper和如何從eclipse遷移到Android studio。這篇文章記於2015.12.30,Android studio正式版本已經開發到1.5,而預覽版已經到了2.0,所以轉到Android studio吧。
  • 寫給Android開發的Gradle知識體系
    Android Studio的模塊類型和項目視圖Android Studio中的每個項目包含一個或多個含有原始碼文件和資源文件的模塊,這些模塊可以獨立構建、測試或調試,一個Android Studio的模塊類型可以有以下幾種:Android應用程式模塊 Android應用程式模塊可能依賴於庫模塊,儘管許多Android應用程式只包含一個應用程式模塊
  • Gradle構建工具極簡教程
    我們新建一個web模塊,新建成功後如下:}現在通過gradle插件,查看到項目有root根模塊,model模塊,web模塊。4.12'    }}11.4 統一配置統一項目的版本,只需要在項目目錄下新建gradle.properties文件,寫入group = 'cn.zyzpp'version = '1.0-SNAPSHOT'然後去掉其它配置文件的該內容即可。
  • 掌控 Android Gradle
    │   ├──build.gradle   │   └──setting.gradle一個 Android 工程,通常是由上述結構構成,其中有著許多不為人知的巧妙用法。setting.gradle文件關於setting.gradle中也可以寫代碼,是很多人不知道的。如下代碼是我在上一篇文章【企業級 Android 模塊化平臺設計建議】中講到的一個例子,在setting.gradle文件中,可以指定一個project位置,這裡就可以將一個外部工程中的模塊導入到APP工程中了。
  • 使用Gradle編譯Java工程之自定義Plugins篇
    所以如果還不了解如何自定義任務類的小夥伴們可以先看看我之前的文章:使用Gradle編譯Java工程之自定義Task類型篇實現自定義的插件首先有三種方式來編寫我們的插件在我們構建項目的build.gradle腳本中直接編寫,這種方式的好處是插件會自動被編譯加載到我們的classpath
  • 從停用Maven,擁抱Gradle開始,學習SpringBoot
    那麼,就詳細的看了下,對應的文章 https://spring.io/blog/2020/06/08/migrating-spring-boot-s-build-to-gradle  文章對疑問做了很好的詮釋。
  • Android Gradle(1) 概念及基礎
    項目構建工具,除了 gradle之外,還有 ant, maven,只不過很少使用,已經漸漸轉 gradle.Gradle在 androidStudio項目中存在的痕跡如下圖(這是一個新建的 project):
  • 原創 | 看完此文,你對Gradle的理解又升級了!
    接著在模塊build.gradle中進行配置,如果還不清楚什麼是模塊build.gradle和項目build.gradle,看寫給Android開發的Gradle知識體系這篇文章。在模塊build.gradle中加入如下代碼。apply plugin: 'com.android.application'android { ...
  • 聊聊 Kafka:編譯 Kafka 源碼並搭建源碼環境
    下載完後解壓,這個源碼文件還需要導入依賴 jar 包,個人使用 IDEA 來 import 導入項目,導入完後需使用前面配置好的 gradle 作為 Gradle home 地址。docs 目錄:Kafka 設計文檔以及組件相關結構圖。examples 目錄:Kafka 樣例相關目錄。
  • 軟體項目實訓及課程設計指導——系統設計中的系統架構設計示例
    軟體項目實訓及課程設計指導——軟體系統設計中的系統架構設計示例1、軟體系統概要設計中所涉及的主要設計內容和工作過程(1)在軟體應用系統項目的系統概要設計工作中,首先是要完成軟體系統的總體架構設計及系統的分層設計,然後再利用UML包視圖體現出軟體系統架構設計的最終結果
  • Spring Boot + Mybatis 多模塊(module)項目的完整搭建教程
    一、前言二、搭建步驟1、創建父工程2、創建子模塊3、運行項目4、配置模塊間的依賴關係5、web層調用biz層接口測試6、集成Mybatis四、總結五、未提到的坑一、前言最近公司項目準備開始重構,框架選定為SpringBoot+Mybatis,本篇主要記錄了在
  • 分享 7個 Gradle 實用小技巧
    }這樣雖然實現了依賴的統一管理,但是隨著項目越來越大,依賴也會越來越多,常常會有幾十甚至上百行,導致build.gradle越來越長。有沒有一種好的方式不在 build.gradle 中寫這麼多的依賴配置?有,就是使用循環遍歷依賴。示例如下,首先添加config.gradle。
  • 給 Android 開發者的 Gradle 入門指南
    settings.gradlesettings.gradle 文件是保存在你通知 Gradle 的地方,即你的工程所有的子工程 /module 目錄下。這是通過 include 命令完成的。如果你將另一個模塊添加到你的工程中,Android Studio 將會自動將其添加到這個文件中。
  • Gradle 創建java項目詳細步驟
    Maven 用pom.xml 文件描述, 是對ant的補充, 項目統一管理的得力助手, 統一的依賴包使得項目不再為版本不一致而發愁.Gradle 用build.gradle文件, 可讀性更強, 使用更方便, 可謂如日中天.來自百科解讀:Gradle是一個基於Apache Ant和Apache Maven概念項目自動化構建開源工具。
  • 7 個你應該知道的Gradle 實用技巧
    }這樣雖然實現了依賴的統一管理,但是隨著項目越來越大,依賴也會越來越多,常常會有幾十甚至上百行,導致build.gradle越來越長有沒有一種好的方式不在 build.gradle 中寫這麼多的依賴配置?有,就是使用循環遍歷依賴。
  • 從0設計App(5):如何搭建系統架構和產品結構(中)
    因此我們還需要思考兩個方面,並從這兩個流程入手來拆解系統架構。2.1 應用架構設計對於任何一家公司,任何一款產品來說,在設計軟體系統時,就要在一開始考慮清楚應該如何設計企業級應用架構。這是培養產品經理大局觀的必修課,尤其是對於B端產品經理來說。什麼是應用架構呢?
  • 有了Gradle,還會選Maven嗎?
    首先看一下我們最初使用 Gradle 構建 Spring Cloud 項目的 build.gradle 的寫法:buildscript {    ext {        springCloudVersion = 'Edgware.SR3'        springBootVersion = '1.5.9.RELEASE'        REPOSITORY_HOME
  • 架構設計
    軟體項目使用的程式語言、框架、組件、資料庫、人工智慧、大數據等技術,都有學習成本要讓軟體穩定運行也複雜。軟體開發完成上線後,充滿了各種不確定性,比如雲服務商可能宕機,比如明星發個微博可能造成系統癱瘓,又比如有人刪庫跑路了正因為存在以上這幾個原因,我們需要架構設計去降低這些複雜性降低開發成本。