日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Gradle 简单使用

發布時間:2023/12/3 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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=8

build.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 是配合源代碼測試和任務相關環境使用

子模塊配置

subprojects { // 子模塊apply plugin: 'java' // 引入之前的插件apply plugin: 'org.springframework.boot' // 引入之前的插件apply plugin: 'io.spring.dependency-management' // 引入之前的插件sourceCompatibility = project_jdk // 本次項目都是基于JDK-11版本編寫的targetCompatibility = project_jdk // 本次項目都是基于JDK-11版本編寫的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 { // 公共依賴庫管理}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' // 編碼配置 }

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 简单使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。