Gradle 简单使用
文章目錄
- 創(chuàng)建Gradle項(xiàng)目
- dependencies.gradle
- gradle.properties
- build.gradle
- Gradle配置文件詳解
- dependency-management 插件
- SpringBootPlugin 插件
- 多模塊
- 熱部署
創(chuàng)建Gradle項(xiàng)目
dependencies.gradle
ext.versions = [ // 定義所有要使用的版本號springboot: '2.4.1' // SpringBoot版本號 ] ext.libraries = [ // 定義所有的依賴庫'spring-boot-gradle-plugin': "org.springframework.boot:spring-boot-gradle-plugin:${versions.springboot}" ]gradle.properties
project_group=com.wyy project_version=1.0.0 project_jdk=8build.gradle
buildscript { // 定義腳本使用資源apply from: 'dependencies.gradle' // 引入所需要的依賴庫文件repositories { // 腳本資源倉庫maven { url 'https://maven.aliyun.com/repository/public' }}dependencies { // 依賴庫classpath libraries.'spring-boot-gradle-plugin'} }group project_group version project_version apply from: 'dependencies.gradle' // 引入所需要的依賴庫文件 def env = System.getProperty("env") ?: 'dev' // 獲取env環(huán)境屬性subprojects { // 子模塊apply plugin: 'java' // 引入之前的插件apply plugin: 'org.springframework.boot' // 引入之前的插件apply plugin: 'io.spring.dependency-management' // 引入之前的插件sourceCompatibility = project_jdk // 本次項(xiàng)目都是基于JDK-8版本編寫的targetCompatibility = project_jdk // 本次項(xiàng)目都是基于JDK-8版本編寫的repositories { // 配置Gradle倉庫def ALIYUN_REPOSITORY_URL = 'http://maven.aliyun.com/nexus/content/groups/public'def ALIYUN_JCENTER_URL = 'http://maven.aliyun.com/nexus/content/repositories/jcenter'all {ArtifactRepository repo ->if (repo instanceof MavenArtifactRepository) {def url = repo.url.toString()if (url.startsWith('https://repo1.maven.org/maven2')) {project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_REPOSITORY_URL."remove repo}if (url.startsWith('https://jcenter.bintray.com/')) {project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_JCENTER_URL."remove repo}}}maven { url ALIYUN_REPOSITORY_URL } // 設(shè)置阿里云倉庫maven { url ALIYUN_JCENTER_URL } // 設(shè)置阿里云倉庫}dependencies { // 公共依賴庫管理compile('org.springframework.boot:spring-boot-devtools') // 允許進(jìn)行項(xiàng)目的熱部署}sourceSets { // 源代碼目錄配置main { // main及相關(guān)子目錄配置java { srcDirs = ['src/main/java'] }resources { srcDirs = ['src/main/resources', "src/main/profiles/$env"] }}test { // test及相關(guān)子目錄配置java { srcDirs = ['src/test/java'] }resources { srcDirs = ['src/test/resources'] }}}test { // 配置測試任務(wù)useJUnitPlatform() // 使用JUnit測試平臺}// 最終生成的jar文件名稱:baseName-version-classifier.extensiontask sourceJar(type: Jar, dependsOn: classes) { // 源代碼的打包任務(wù)archiveClassifier = 'sources' // 設(shè)置文件的后綴from sourceSets.main.allSource // 所有源代碼的讀取路徑}task javadocTask(type: Javadoc) { // JavaDoc文檔打包任務(wù)options.encoding = 'UTF-8' // 設(shè)置文件編碼source = sourceSets.main.allJava // 定義所有的Java源代碼}task javadocJar(type: Jar, dependsOn: javadocTask) { // 先生成JavaDoc再打包archiveClassifier = 'javadoc' // 文件標(biāo)記類型from javadocTask.destinationDir // 通過JavadocTask任務(wù)中找到目標(biāo)路徑}tasks.withType(Javadoc) { // 文檔編碼配置options.encoding = 'UTF-8' // 定義編碼}tasks.withType(JavaCompile) { // 編譯編碼配置options.encoding = 'UTF-8' // 定義編碼}artifacts { // 最終的打包的操作任務(wù)archives sourceJar // 源代碼打包archives javadocJar // javadoc打包}gradle.taskGraph.whenReady { // 在所有的操作準(zhǔn)備好后觸發(fā)tasks.each { task -> // 找出所有的任務(wù)if (task.name.contains('test')) { // 如果現(xiàn)在發(fā)現(xiàn)有test任務(wù)// 如果將enabled設(shè)置為true表示要執(zhí)行測試任務(wù),如果設(shè)置為false表示不執(zhí)行測試任務(wù)task.enabled = true}}}[compileJava, compileTestJava, javadoc]*.options*.encoding = 'UTF-8' // 編碼配置 } project('microboot-web') { // 子模塊dependencies { // 配置子模塊依賴compile(project(':microboot-common')) // 引入其他子模塊compile('org.springframework.boot:spring-boot-starter-web') // 引入SpringBoot依賴} } project('microboot-common') { // 子模塊dependencies {} // 配置子模塊依賴 }在 公共子模塊 的 build.gradle 中添加如下配置
jar { enabled = true} // 允許打包為jar文件 bootJar { enabled = false } // 不允許打包為Boot執(zhí)行文件 javadocTask { enabled = false } // 不需要打包為doc文件Gradle倉庫 也可以這樣
repositories { // 配置Gradle倉庫mavenLocal()maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }mavenCentral()jcenter()}可以在 subprojects {} 子模塊中加入 版本控制插件
dependencyManagement {// 版本控制插件imports {mavenBom libraries.'spring-cloud-dependencies' // SpringCloud依賴管理mavenBom libraries.'spring-cloud-alibaba-dependencies' // SpringCloudAlibaba依賴管理}}公共依賴庫管理 ( 但是需要在 dependencies.gradle 中加入 JUnit 和 lombok 依賴 )
dependencies { // 公共依賴庫管理compile('org.springframework.boot:spring-boot-devtools') // 項(xiàng)目熱部署// 以下為測試環(huán)境的相關(guān)依賴配置testImplementation('org.springframework.boot:spring-boot-starter-test') {exclude group: 'junit', module: 'junit' // 移除Junit4}testImplementation(enforcedPlatform(libraries.'junit-bom')) // 綁定為JUnit5運(yùn)行testImplementation(libraries.'junit-platform-commons') // Junit5測試組件testImplementation(libraries.'junit-platform-engine') // Junit5測試組件testImplementation(libraries.'junit-jupiter-api') // Junit5測試組件testImplementation(libraries.'junit-vintage-engine') // Junit5測試組件testImplementation(libraries.'junit-jupiter-engine') // Junit5測試組件testImplementation(libraries.'junit-platform-launcher') // Junit5測試組件// 以下為Lombok插件的相關(guān)依賴配置compileOnly(libraries.'lombok') // 編譯時(shí)生效annotationProcessor(libraries.'lombok') // 注解時(shí)生效}上面為多模塊開發(fā),單模塊時(shí)的 build.gradle ( 去掉subprojects {} ,但是保留里面配置項(xiàng),repositories{} 有多種寫法,dependencies{}中配置就不再是公共模塊配置,而只是此依賴項(xiàng) )
Gradle配置文件詳解
初始
版本號
倉庫
版本號管理
dependency-management 插件
但是如果采用的是此類的配置方式就會存在有一個(gè)比較麻煩的問題,因?yàn)樵赟pringBoot里面要引入的相關(guān)的
starters依賴庫是非常多的(SpringBoot官方文檔告訴大家的),就可能該變量會被引用無數(shù)次,這樣的項(xiàng)目結(jié)構(gòu)管理有些重復(fù)了,所以如果要想解決這個(gè)重復(fù)的SpringBoot-Xxx-Starter-Xxx依賴庫的版本配置問題,那么最佳的做法就可以考慮引入一些插件
1、 【Maven 倉庫】通過 Maven的中央倉庫查詢插件當(dāng)前的版本號:
implementation group: 'io.spring.dependency-management", name: 'io.spring.dependency-management.gradle.plugin', version: '1.0.11.RELEASE', ext: 'pom'2、【firstboot項(xiàng)目】修改build.gradle配置文件,設(shè)置插件的引用:
此時(shí)
可以去掉版本號
此時(shí)沒有在項(xiàng)目之中引入依賴庫的位置上繼續(xù)進(jìn)行版本號的定義,而是在頂部將所有的版本號都固定好了。
雖然這個(gè)時(shí)候已經(jīng)合理的搭建了一個(gè)SpringBoot項(xiàng)目,但是依然有的同學(xué)會認(rèn)為這樣手工的配置形式實(shí)在是過于繁瑣了,所以可以考慮直接利用Spring所給出的官方構(gòu)建工具完成: start.spring.io
引入dependency-management 插件后,gradle會增加一些命令
此時(shí)存在有了一個(gè)bootJar任務(wù),這個(gè)任務(wù)就是讓當(dāng)前的項(xiàng)目以SpringBoot方式運(yùn)行: gradle bootRun,下面通過命令行的方式來基于此命令實(shí)現(xiàn)SpringBoot的運(yùn)行:
在SpringBoot項(xiàng)目開發(fā)完成之后肯定要進(jìn)行項(xiàng)目的打包處理,而在進(jìn)行打包處理的時(shí)候,往往采用的默認(rèn)命令: gradlebuild,但是在引入了SpringBoot 插件之后SpringBoot提供了一個(gè)默認(rèn)的“bootJar”打包任務(wù),所以就希望可以將build任務(wù)(iar任務(wù))與bootRun (bootlar)合并在一起,既然有這樣的要求,就可以考慮通過一個(gè)專屬的插件來完成
SpringBootPlugin 插件
在配置文件最上方引入插件,并刪掉此部分
加入這兩個(gè)插件
修改寫法
現(xiàn)在所有與SpringBoot有關(guān)的版本編號統(tǒng)一都交給了“spring-boot-gradle-plugin”來定義了,而后相關(guān)的任務(wù)也會自動的進(jìn)行關(guān)聯(lián)。
多模塊
1、【IDEA工具】創(chuàng)建一個(gè)新的Gradle項(xiàng)目:microboot
2.【microboot項(xiàng)目】修改gradle.properties資源文件配置相關(guān)的項(xiàng)目屬性:
3、【microboot項(xiàng)目】創(chuàng)建“dependecies.gradle”文件,這個(gè)文件實(shí)現(xiàn)所有項(xiàng)目之中依賴庫版本的定義:
4、【microboot項(xiàng)目】修改build.gradle配置文件,引入相關(guān)的子配置文件:
改為
改 group、version、引入依賴庫文件、配置子模塊、env 是配合源代碼測試和任務(wù)相關(guān)環(huán)境使用
子模塊配置
5、【microboot項(xiàng)目】創(chuàng)建一個(gè)“microboot-common”子模塊,這是一個(gè)公共的模塊,用于定義一些公共的程序類
在 公共子模塊 的 build.gradle 中添加如下配置
jar { enabled = true} // 允許打包為jar文件 bootJar { enabled = false } // 不允許打包為Boot執(zhí)行文件 javadocTask { enabled = false } // 不需要打包為doc文件6、【microboot項(xiàng)目】創(chuàng)建一個(gè)“microboot-web”子模塊,這個(gè)模塊主要引用“microboot-common”子模塊,并且實(shí)現(xiàn)WEB程序的開發(fā)
7、【microboot項(xiàng)目】修改build.gradle配置文件,進(jìn)行子模塊的定義
project('microboot-web') { // 子模塊dependencies { // 配置子模塊依賴compile(project(':microboot-common')) // 引入其他子模塊compile('org.springframework.boot:spring-boot-starter-web') // 引入SpringBoot依賴} } project('microboot-common') { // 子模塊dependencies {} // 配置子模塊依賴 }熱部署
在進(jìn)行java項(xiàng)目開發(fā)過程之中,最痛苦的一件事情就是每次修改之后都需要重新啟動應(yīng)用程序,所以此時(shí)就會感覺到非常非常的痛苦了,為了解決這個(gè)問題在SpringBoot里面就提供了一個(gè)所謂的熱加載的機(jī)制,只要你的程序發(fā)生了變更,那么就會自動的進(jìn)行SpringBoot容器的重新啟動,而后加載新的配置。
1、【microboot項(xiàng)目】如果要想解決這種自動加載的問題,需要在項(xiàng)目之中引入一個(gè)""依賴庫
2、【IDEA工具】如果你現(xiàn)在使用的是Eclipse(STS工具),只需要引入以上的依賴就可以實(shí)現(xiàn)自動的加載了,但是如果是在IDEA工具里面,則還需要進(jìn)行一些配置:【File】【Settings】
3、【IDEA工具】僅僅配置以上的選項(xiàng)還不能夠支持自動的部署處理,如果要想實(shí)現(xiàn)部署的自動配置,那么還需要在IDEA工具里面進(jìn)行一些配置的注冊,按下一個(gè)組合鍵:" CTRL + SHIFT + ALT + / "
4、【[IDEA工具】當(dāng)所有的配置都已經(jīng)完成之后,就需要重新啟動IDEA 工具才可以實(shí)現(xiàn)自動的熱部署
在每次代碼修改并且保存之后都會自動的重新啟動SpringBoot容器,實(shí)際上這個(gè)時(shí)候的啟動并不是整個(gè)容器的重新啟動,而是內(nèi)部的部分程序類的啟動。
實(shí)際上所謂的熱部署本質(zhì)上是將整個(gè)的類加載器進(jìn)行了拆分,在沒有引入“devtools”工具的時(shí)候,所有的系統(tǒng)類和用戶的程序類都使用同一個(gè)類加載器進(jìn)行加載,但是當(dāng)引入了“devtools”工具的時(shí)候,系統(tǒng)類有系統(tǒng)類的加載器,而程序類有程序類的加載器,此時(shí)實(shí)際上就是程序類的加載器進(jìn)行重新工作,重新啟動,這樣的啟動要比整個(gè)項(xiàng)目的重新啟動速度更快一些。
總結(jié)
以上是生活随笔為你收集整理的Gradle 简单使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 领跑友商?基于Android 14更新的
- 下一篇: (选择 冒泡 插入 二分 异或)