亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何正確的使用Gradle

發布時間:2021-03-01 17:16:05 來源:億速云 閱讀:177 作者:Leah 欄目:開發技術

本篇文章為大家展示了如何正確的使用Gradle,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

一、Gradle相比Maven的優勢

  • 配置簡潔

Maven是用pom.xml管理,引入一個jar包至少5行代碼,Gradle只需要一行。

  • 構建速度快

Gradle支持daemon方式運行,啟動速度快,同時有基于daemon的增量構建,充分利用JVM的運行時優化,和緩存數據構建速度相比Maven快很多。

  • 更好的靈活性、擴展性

Gradle 相對于 Maven 等構建工具, 其提供了一系列的 API 讓我們有能力去修改或定制項目的構建過程。

二、基本配置

  • 設置本地倉庫地址

默認本地倉庫地址是:~/.gradle,Windows下會占用大量C盤空間。

設置環境變量,GRADLE_USER_HOME=/your/path

  • 復用Maven本地倉庫

在repositories配置mavenLocal()即可,如果是init.gradle全局配置,參考以下init.gradle文件

Maven本地倉庫查找路徑:

(1)USER_HOME/.m2/settings.xml

(2)M2_HOME/conf/settings.xml

(3)USER_HOME/.m2/repository

  • 國內鏡像加速

國內訪問國外倉庫地址很慢,第一種方法是在每個項目中設置repositories

repositories {
 mavenLocal()
 'maven(http://maven.aliyun.com/nexus/content/groups/public/)'
 mavenCentral()
}

更推薦的方式是類似的Maven的settings.xml全局的配置,在上一步配置的GRADLE_USER_HOME路徑下,添加init.gradle文件,以下配置文件中使用了阿里云的Gradle代理,支持jcenter、google、maven倉庫。

gradle.projectsLoaded {
 rootProject.allprojects {
  buildscript {
   repositories {
    def JCENTER_URL = 'https://maven.aliyun.com/repository/jcenter'
    def GOOGLE_URL = 'https://maven.aliyun.com/repository/google'
    def NEXUS_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://jcenter.bintray.com/')) {
       project.logger.lifecycle "Repository ${repo.url} replaced by $JCENTER_URL."
       println("buildscript ${repo.url} replaced by $JCENTER_URL.")
       remove repo
      }
      else if (url.startsWith('https://dl.google.com/dl/android/maven2/')) {
       project.logger.lifecycle "Repository ${repo.url} replaced by $GOOGLE_URL."
       println("buildscript ${repo.url} replaced by $GOOGLE_URL.")
       remove repo
      }
      else if (url.startsWith('https://repo1.maven.org/maven2')) {
       project.logger.lifecycle "Repository ${repo.url} replaced by $REPOSITORY_URL."
       println("buildscript ${repo.url} replaced by $REPOSITORY_URL.")
       remove repo
      }
     }
    }
    jcenter {
     url JCENTER_URL
    }
    google {
     url GOOGLE_URL
    }
    maven {
     url NEXUS_URL
    }
   }
  }
  repositories {
   def JCENTER_URL = 'https://maven.aliyun.com/repository/jcenter'
   def GOOGLE_URL = 'https://maven.aliyun.com/repository/google'
   def NEXUS_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://jcenter.bintray.com/')) {
      project.logger.lifecycle "Repository ${repo.url} replaced by $JCENTER_URL."
      println("buildscript ${repo.url} replaced by $JCENTER_URL.")
      remove repo
     }
     else if (url.startsWith('https://dl.google.com/dl/android/maven2/')) {
      project.logger.lifecycle "Repository ${repo.url} replaced by $GOOGLE_URL."
      println("buildscript ${repo.url} replaced by $GOOGLE_URL.")
      remove repo
     }
     else if (url.startsWith('https://repo1.maven.org/maven2')) {
      project.logger.lifecycle "Repository ${repo.url} replaced by $REPOSITORY_URL."
      println("buildscript ${repo.url} replaced by $REPOSITORY_URL.")
      remove repo
     }
    }
   }
   jcenter {
    url JCENTER_URL
   }
   google {
    url GOOGLE_URL
   }
   maven {
    url NEXUS_URL
   }
  }
 }
}

三、最佳實踐

  • 多模塊配置

稍微大點的項目都會分模塊開發,Gradle相比Maven的一個優勢是用IDEA執行一個項目的代碼時,會自動編譯其依賴的其他模塊。

在項目一級目錄下添加settings.gradle配置文件:

rootProject.name = 'my-roject-name'

include 'module1'
include 'module2'

其中module1、module2就是子模塊的文件夾名,在子模塊里需要有一個配置子模塊的build.gradle

模塊內依賴,比如module2依賴module1,在module2的build.gradle配置文件里添加:

dependencies {
 compile project(":module1")
}
  • profile支持

profile用來加載不同環境的的配置文件,在筆者所在公司,推薦dev、test、staging、prod四套環境。

添加gradle.properties配置文件指定默認profile

profile=dev

啟動profile,加載不同路徑下的配置,在build.gradle里添加配置:

ext {
 profile = project['profile']
}
sourceSets {
 main {
  resources {
   srcDirs = ["src/main/resources/", "src/main/profiles/${profile}"]
  }
 }
}

命令行參數指定profile:

gradle build -Pprofile=prod
  • 初始化gradle項目

安裝gradle,并在項目頂級目錄下執行:

gradle init

如果當前目錄有pom.xml,接下來會提示是否從Maven項目初始化Gradle項目,選擇yes回車執行。

參數文檔:https://docs.gradle.org/current/userguide/build_init_plugin.html

  • 引入bom文件

pom文件在Maven中是一個很有用的功能,方便多個項目統一版本號,在Maven中配置方式如下:

<dependencyManagement>
  <dependencies>
   <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-dependencies</artifactId>
    <version>${spring-boot.version}</version>
    <type>pom</type>
    <scope>import</scope>
   </dependency>
  </dependencies>
</dependencyManagement>

Gradle有插件支持類似操作:

//引入插件
plugins {
 id "io.spring.dependency-management" version "1.0.10.RELEASE"
}
//引入bom
dependencyManagement {
 imports {
  mavenBom 'org.springframework.boot:spring-boot-dependencies:${spring-boot.version}'
 }
}
//使用bom,不需要執行版本號
dependencies {
 implementation "org.springframework.boot:spring-boot-starter-web"
}
  • 引入parent文件

在maven中執行parent是管理多個項目常用的方式,parent指定了項目的基本配置,配置方式如下:

<parent>
 <groupId>com.lesofn.blog</groupId>
 <artifactId>test-parent</artifactId>
 <version>0.0.1</version>
</parent>

Maven中的parent有兩個作用,一個是類似bom的統一管理版本,即parent中的:dependencyManagement,另一個是基礎jar包的引用,即父pom中的:dependencies

在Gradle可通過上面的io.spring.dependency-management插件實現類似的效果:

//引入插件
plugins {
 id "io.spring.dependency-management" version "1.0.10.RELEASE"
}
//引入parent,實現maven中dependencyManagement的功能,不用指定版本號
dependencyManagement {
 imports {
  mavenBom 'com.lesofn.blog:test-parent:0.0.1'
 }
}
//再次引入parent,實現maven中dependencies的功能
dependencies {
 implementation 'com.lesofn.blog:test-parent:0.0.1'
}

上述內容就是如何正確的使用Gradle,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

西乌| 平乐县| 天长市| 深州市| 北票市| 北川| 新郑市| 通州市| 大关县| 天台县| 青海省| 上栗县| 读书| 云和县| 时尚| 湖口县| 浠水县| 灵台县| 鄂伦春自治旗| 长子县| 海门市| 河池市| 大姚县| 静宁县| 赤水市| 五指山市| 宁安市| 伊春市| 中卫市| 庄浪县| 会理县| 清丰县| 翁牛特旗| 苗栗市| 昌邑市| 桓台县| 平乡县| 吴忠市| 绥滨县| 六枝特区| 阜阳市|