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