gradle的build.gradle詳解

NPException發表於2019-06-28

一個專案中只放置一個build.gradle,build.gradle可以理解為一個Project框架,提供了對一個專案的基本配置。

project的常用:

屬性:

  1. group
  2. name(artifact)
  3. version 專案版本(全域性的)
  4. sourceCompatibility = 1.8                     // source使用的jdk版本 
  5. targetCompatibility = 1.8                     // 編譯時使用的jdk版本或者更新的java虛擬機器相容
  6. compileJava.options.encoding = 'UTF-8'        
  7. compileTestJava.options.encoding = 'UTF-8'    

方法: 

  1. apply 應用外掛
  2. dependencies 新增依賴
  3. repositories 新增倉庫
  4. task 定義任務
  5. buildscript
  6. allprojects
  7. subprojects
  8. configurations

 

gradle中的repositories 

//repositories是project一個方法,閉包作為引數
repositories {
    mavenCentral()
}

這個是用來指定使用什麼庫的,它可以存在buildScript塊、allprojects塊、根級別塊。

buildScript塊的repositories主要是為了Gradle指令碼自身的執行,獲取指令碼依賴外掛。

根級別的repositories主要是為了當前專案提供所需依賴包,比如log4j、spring-core等依賴包可從mavenCentral倉庫獲得。

allprojects塊的repositories用於多專案構建,為所有專案提供共同所需依賴包。而子專案可以配置自己的repositories以獲取自己獨需的依賴包。

gradle中的常用屬性可以寫在gradle.properties中

一個gradle檔案中的屬性有很多,比如 jdk版本,編碼型別,dependency 版本。如果都放在 build.gradle 中勢必不好管理哦(經驗哦),那麼gradle預設提供了一個 gradle.properties 檔案。用這個檔案來管理所有的屬性在合適不過了

Gradle 外掛(Plugins)

Gradle 也可以用下面的方式宣告使用的外掛:

// build.gradle
plugins {
    id 'com.example.plugin', version '1.0'
}

其實是從 Gradle 官方的外掛倉庫 https://plugins.gradle.org/m2/ 下載的。

但是,眾所周知的原因,某些地區會連不上,導致下載不到需要的外掛,例如出現如下錯誤:

* What went wrong:
A problem occurred configuring root project 'MyApp'.
> Could not resolve all files for configuration ':classpath'.
   > Could not download jimfs.jar (com.google.jimfs:jimfs:1.1)
      > Could not get resource 'https://plugins.gradle.org/m2/com/google/jimfs/jimfs/1.1/jimfs-1.1.jar'.
         > Could not HEAD 'https://plugins.gradle.org/m2/com/google/jimfs/jimfs/1.1/jimfs-1.1.jar'.
            > Connect to d29vzk4ow07wi7.cloudfront.net:443 [d29vzk4ow07wi7.cloudfront.net/54.192.84.6, d29vzk4ow07wi7.cloudfront.net/54.192.84.168, d29vzk4ow07wi7.cloudfront.net/54.192.84.128, d29vzk4ow07wi7.cloudfront.net/54.192.84.173] failed: Read timed out

又或者,外掛是不對外的,存在某個私有倉庫的,該如何修改或者新增額外的私有倉庫地址呢?

直接修改 settings.gradle 來新增其它倉庫:

// settings.gradle
pluginManagement {
    repositories {
        maven {
            url 'http://examle.com/maven-repo'
        }
        gradlePluginPortal()
    }
}

當然你也可以使用老的方式應用外掛:

buildscript {
    repositories {
        maven {
            url 'http://examle.com/maven-repo'
        }
    }
    dependencies {
        classpath 'com.example.plugin:gradle-plugin:1.0'
    }
}

apply plugin: 'com.example.plugin'

dependencies

例如根目錄依賴配置單專案專案依賴:

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

 

多專案構建

settings.gradle作用就是用於多專案構建,一般像這樣:

rootProject.name = 'ant'
include 'framework-eureka'
include 'framework-gateway'

include 'module-common'
include 'module-test'


 

 

相關文章