gradle基礎配置


gradle構建腳本基礎

gradle常用命令

//列出項目的所有屬性. 這樣你就可以看到插件加入的屬性以及它們的默認值.
gradle properties ​ //列出項目的所有任務 gradle -q tasks --all ​

 

 


 

 

字符串

  1. ' ' 僅僅表示一個字符串

  2. " " 字符串拼接,可以拼接變量變量,也可以拼接任務$任務

  3. ''' ''' 可以用來換行


定義常量

一個項目對應一個project實例,gradle根據build.gradle配置內容實例化project實例

project屬性有group,name,version

方法有apply ,repositories,dependencies,task

屬性的其他配置方式可以通過 : ext , gradle.properties

ext.property1 = "this is property1" //也可以用閉包的方式 ext {   property2 = "this is property2" }

 


 

定義任務

 

task hello {   doLast {       println 'Hello world!'   } }

快捷的定義方式,使用<< 代替 doLast{}

<< 操作符是 doLast 的簡單別稱.

task helloWorld << { ​    println 'helloWorld343'  }

默認任務定義,調用任何任務都會執行的任務,沒有<< 也米有doLast{}

task defaultmytask {  println 'ddddddd' }

聲明任務之間的依賴

intro 依賴於 hello, 所以執行 intro 的時候 hello 命令會被優先執行來作為啟動 intro 任務的條件.

在加入一個依賴之前, 這個依賴的任務不需要提前定義

task hello << {   println 'Hello world!' } ​ task intro(dependsOn: hello) << {   println "I'm Gradle" }

動態任務

下面的times是遍歷,counter是遍歷的變量名

4.times { counter ->   task "task$counter" << {       println "I'm task number $counter"   } }

 


 

使用插件

//方式一
plugins {  id 'war'   id 'org.hidetake.ssh' version '2.9.0' } ​ ​ //方式二 //插件 apply plugin: 'java-library' apply plugin: 'eclipse' apply plugin: 'maven' apply plugin: 'java'

 

 


使用倉庫

repositories
{
  //第三方倉庫  maven{url 'http://maven.aliyun.com/nexus/content/groups/public/'} //maven中央倉庫  mavenCentral()  jcenter() }

 

 


添加依賴

dependencies {
    compile group: 'commons-collections', name: 'commons-collections', version: '3.2'   testCompile group: 'junit', name: 'junit', version: '4.+' }

 

 


定制項目

//jdk版本
sourceCompatibility = 1.8 //編碼 [compileJava,compileTestJava,javadoc]*.options*.encoding = 'UTF-8' //項目版本 version = '1.0'

 

 


上傳jar包

uploadArchives {
    repositories {       flatDir {           dirs 'repos'       }   } }
uploadArchives {  
    repositories {       mavenDeployer {    //userName 和 password 為maven的用戶名和密碼           repository(url: "http://172.30.10.160:8081/nexus/content/repositories/snapshots/") {               authentication(userName: "deploy", password: "deploy123")           }           pom.project {               name=project.name               packaging='jar'               description='a test'           }       }   } } 

也可以使用maven-publish插件

 


多項目構建

//settings.gradle
​
//上下層級構建多項目 ​ rootProject.name = '111' ​ include '111-1' include '111-2' //同一層級構建多項目 ​ rootProject.name = '111' ​ includeFlat '111-1' includeFlat '111-2'

項目之間的依賴

dependencies {
   
   compile project(":111-2")   }

 


解決版本沖突

  1. 查看依賴報告

  2. 排除傳遞性依賴

  3. 強制指定一個版本

groovy默認使用最高版本幫助我們解決版本沖突

//修改默認策略,如果由版本沖突,就構建失敗
configurations.all {  resolutionStrategy {   failOnVersionConflict()  } } ​ //解決方式 //1.排除傳遞性依賴 dependencies {  compile (''){   exclude  } } //2.強制指定一個版本 configurations.all {  resolutionStrategy {   failOnVersionConflict()       force ''  } }

 

多項目構建-公共配置

allprojects對所有的項目有效

subprojects對所有的項目有效也可以個性化定制

allprojects {
 apply plugin: 'java'  sourceCompatibility = 1.8     //修改默認策略,如果由版本沖突,就構建失敗  configurations.all {   resolutionStrategy {    failOnVersionConflict()   }  } ​  uploadArchives {    repositories {        flatDir {            dirs 'repos'        }    }  } ​ } //倉庫,依賴放在allprojects中也可以 subprojects {  //倉庫  repositories {    jcenter()  }  //依賴  dependencies {    }   }

屬性也可以定義在gradle.properties

group=com.home.woms
version=1.1.1

多項目構建-獨享配置

在父項目bulid.gradle中配置子項目

project(‘:core’) {     ext{                   hibernateVersion = ‘4.2.1.Final’     }  dependencies {     compile “org.hibernate:hibernate-core:${hibernateVersion} } }

 


多項目構建-多環境配置

http://www.infoq.com/cn/articles/Gradle-application-in-large-Java-projects/

1. 通過指定不同的資源文件目錄

https://github.com/someok/gradle-multi-project-example

  • resources: 通用配置放在這兒

  • resources-dev: 開發環境配置

  • resources-prod: 生產環境配置

apply plugin: 'war' ​ archivesBaseName = 'project-web' version = '1.0.0' ​ // // 設置默認 resources 為開發環境狀態 // // 這兒如果不設置的話,idea 編譯時只會默認獲取 resources 目錄 // sourceSets {   main { ​       resources {           srcDirs = ['src/main/resources', 'src/main/resources-dev']       }   } } ​ ​ ​ task release (dependsOn : war) {  doFirst{    sourceSets {           main {               resources {                   srcDirs = ["src/main/resources", "src/main/resources-prod"]               }           }       }   }  doLast{    println "${sourceSets.main.resources.srcDirs}"  } ​ }
  • gradle war: 這個是用來打測試的 war 包,采用的是 resources-dev。

  • gradle release: 這個才是用來打生產用的 war 包,采用的是 resources-prod。

ext {
    profile = project['profile'] } ​ sourceSets {   main {       resources {           srcDir "config/application/spring/${profile}",                       "config/application/properties/${profile}"       }   } } //這樣在打包的過程中,就可以使用-P傳入的參數的資源文件夾下面的properties和xml文件作為項目的配置文件。

2. 傳統的properties文件

//第一種方式是使用傳統的properties文件, 然后在使用Gradle時,通過傳入不同的參數加載不同的properties文件。例如,我們可以在項目中提供development.properties、test.properties和production.properties。在項目運行時,使用-Pprofile=development來指定加載開發環境的配置。構建腳本中加載properties文件的代碼如下
​
allprojects{  apply plugin: 'java'  ext {   profile = 'uat'  // profile = project['profile']  } //gradle構建過程中的默認任務processResources,重寫  processResources {//替換文件使用@key@來標注要被替換的位置,例如 username=@username@    from(sourceSets.main.resources.srcDirs) {        filter(org.apache.tools.ant.filters.ReplaceTokens,tokens: loadProperties())    }  } } def loadProperties(){   def props = new Properties()   new File("${rootProject.projectDir}/conf/${profile}.properties")           .withInputStream {               stream -> props.load(stream)           }   props }

 

3. config.groovy配置文件

def loadGroovy(){   def configFile = file('config.groovy')   new ConfigSlurper(profile).parse(configFile.toURL()).toProperties() } //替換 processResources {    from(sourceSets.main.resources.srcDirs) {        filter(org.apache.tools.ant.filters.ReplaceTokens,tokens: loadGroovy())    }        }

 

 


構建腳本的依賴

 

除了項目需要依賴之外,構建腳本本身也可以有自己的依賴。當使用一個非Gradle官方提供的插件時,就需要在構建腳本里指定其依賴,當然還需要指定該插件的Repository。在Gradle中,使用buildscript塊為構建腳本配置依賴。

比如在項目中使用cucumber-JVM作為項目BDD工具,而Gradle官方沒有提供它的插件,好在開源社區有人提供cucumber的插件。在構建腳本中添加如下代碼:

buildscript {
    repositories {       mavenCentral()   }   dependencies {       classpath "gradle-cucumber-plugin:gradle-cucumber-plugin:0.2"   } } apply plugin: com.excella.gradle.cucumber.CucumberPlugin

 

 


apply其他Gradle文件

當一個項目很復雜的時候,Gradle腳本也會很復雜,除了將子項目的配置移到對應項目的構建腳本之外,還可以可以按照不同的功能將復雜的構建腳本拆分成小的構建腳本,然后在build.gradle里使用apply from,將這些小的構建腳本引入到整體的構建腳本中去。比如在一個項目中既使用了Jetty,又使用了Cargo插件啟動JBoss,就可以把他們分別提到jetty.gradle和jboss.gradle,然后在build.gradle里使用如下的代碼將他們引入進來:

apply from: "jetty.gradle" apply from: "jboss.gradle"

 


定義資源目錄

sourceSets {
    main {       java {           srcDir 'src/main/java' // 指定源碼目錄       }       resources {           srcDir 'src/main/resources' //資源目錄       }   } } ​ //或者 sourceSets {   main.java.srcDirs = ['src/main/java']   main.resources.srcDirs = ['src/main/resources'] }

 


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM