Gradle 构建脚本

  • 构建脚本

    Gradle建立了一个脚本文件来处理两件事。一个是项目,另一个是任务。每个Gradle构建都代表一个或多个项目。项目代表JAR库或Web应用程序,或者它可能代表从其他项目产生的JAR组装而成的ZIP。简单来说,一个项目是由不同的任务组成的。任务是指构建执行的一项工作。一个任务可能是编译某些类,创建JAR,生成Javadoc或将一些存档发布到存储库。Gradle使用Groovy语言编写脚本。
  • 编写构建脚本

    Gradle提供了一种领域特定语言(DSL),用于描述构建。这使用Groovy语言使描述构建更加容易。Gradle的每个构建脚本都是使用UTF-8编码的,离线保存并命名为build.gradle。
    我们正在使用Groovy脚本描述任务和项目。您可以使用Gradle命令运行Gradle构建。该命令查找名为build.gradle的文件。看下面的示例,该示例代表一个打印scriptspoint的小脚本。将以下脚本复制并保存到名为build.gradle的文件中。该构建脚本定义了任务名称hello,该任务名称用于打印jc2182字符串。
    
    task hello {
       doLast {
          println 'jc2182'
       }
    }
    
    在命令提示符下执行以下命令。它执行上面的脚本。您应该执行此操作,将build.gradle文件存储在其中。
    
    C:\> gradle –q hello
    
    输出:
    
    jc2182
    
    Gradle脚本主要使用两个实际对象,一个是项目对象,另一个是脚本对象
    • 项目对象 - 每个脚本描述一个或多个项目。在执行过程中,此脚本将配置项目对象。您可以在构建脚本中调用委托给Project Object的某些方法并使用属性。
    • 脚本对象 - Gradle将脚本代码分成实现脚本接口然后执行的类。这意味着脚本接口声明的所有属性和方法在脚本中都可用。
    下表定义了标准项目属性的列表。所有这些属性在您的构建脚本中都可用。
    名称 类型 默认值
    project Project Project 实例
    name String 项目目录名称
    path String 项目绝对路径
    description String 项目描述
    projectDir File 构建脚本的目录
    buildDir File projectDir/build
    group Object Unspecified
    version Object Unspecified
    ant AntBuilder 一个AntBuilder 实例
  • Groovy基础

    Gradle构建脚本使用完整的Groovy API。请看以下示例。以下示例说明有关将字符串转换为大写形式的信息。将以下给定的代码复制并保存到build.gradle文件中。
    
    task upper {
        doLast {
            String expString = 'Jc2182'
            println "Original: " + expString
            println "Upper case: " + expString.toUpperCase()
        }
    }
    
    在命令提示符下执行以下命令。它执行上面给定的脚本。您应该执行此操作,将build.gradle文件存储在其中。
    
    C:\> gradle –q upper
    
    输出:
    
    Original: Jc2182
    Upper case: CAINIAOYA
    
    下面的示例说明有关将隐式参数($it)的值打印4次的情况。将以下代码复制并保存到build.gradle文件中。
    
    task count {
        doLast {
           4.times { 
              print "$it " 
           }
        }
    }
    
    在命令提示符下执行以下命令。它执行上面给定的脚本。您应该执行此操作,将build.gradle文件存储在其中。
    
    C:\> gradle –q count
    
    输出:
    
    0 1 2 3
    
    Groovy语言提供了许多功能,其中一些重要功能将在下面讨论。
  • Groovy JDK方法

    Groovy向标准Java类添加了许多有用的方法。例如,JDK的Iterable API实现了一个each()方法,该方法在Iterable接口的元素上进行迭代。将以下代码复制并保存到build.gradle文件中。
    
    task groovyJDK  {
        doLast{
           String myName = "Marc";
           myName.each() { 
              println "${it}" 
           };
        }
    }
    
    在命令提示符下执行以下命令。它执行上面给定的脚本。您应该执行此操作,将build.gradle文件存储在其中。
    
    C:\> gradle –q groovyJDK
    
    输出:
    
    M
    a
    r
    c
    
  • 属性存储器

    您可以通过指定其引用来自动访问特定属性的相应getter和setter方法。以下代码段定义了buildDir属性的getter和setter方法的语法。
    
    // Using a getter method
    println project.buildDir
    println getProject().getBuildDir()
    
    // Using a setter method
    project.buildDir = 'target'
    getProject().setBuildDir('target')
    
  • 方法调用上的可选括号

    Groovy在方法调用中包含一个特殊功能,即括号对于方法调用是可选的。此功能也适用于Gradle脚本。看一下以下语法。定义了一个调用test对象的systemProperty的方法。
    
    test.systemProperty 'some.prop', 'value'
    test.systemProperty('some.prop', 'value')
    
  • 闭包作为方法的最后一个参数

    Gradle DSL在许多地方使用闭包。如果方法的最后一个参数是闭包,则可以将闭包放在方法调用之后。以下代码段定义了Closures用作repositories()方法参数的语法。
    
    repositories {
       println "in a closure"
    }
    repositories() { 
       println "in a closure" 
    }
    repositories({ println "in a closure" })
    
  • 默认导入

    Gradle自动将一组导入语句添加到Gradle脚本中。以下列表显示了默认的Gradle脚本导入包。
    
    import org.gradle.*
    import org.gradle.api.*
    import org.gradle.api.artifacts.*
    import org.gradle.api.artifacts.cache.*
    import org.gradle.api.artifacts.component.*
    import org.gradle.api.artifacts.dsl.*
    import org.gradle.api.artifacts.ivy.*
    import org.gradle.api.artifacts.maven.*
    import org.gradle.api.artifacts.query.*
    import org.gradle.api.artifacts.repositories.*
    import org.gradle.api.artifacts.result.*
    import org.gradle.api.component.*
    import org.gradle.api.credentials.*
    import org.gradle.api.distribution.*
    import org.gradle.api.distribution.plugins.*
    import org.gradle.api.dsl.*
    import org.gradle.api.execution.*
    import org.gradle.api.file.*
    import org.gradle.api.initialization.*
    import org.gradle.api.initialization.dsl.*
    import org.gradle.api.invocation.*
    import org.gradle.api.java.archives.*
    import org.gradle.api.logging.*
    import org.gradle.api.plugins.*
    import org.gradle.api.plugins.announce.*
    import org.gradle.api.plugins.antlr.*
    import org.gradle.api.plugins.buildcomparison.gradle.*
    import org.gradle.api.plugins.jetty.*
    import org.gradle.api.plugins.osgi.*
    import org.gradle.api.plugins.quality.*
    import org.gradle.api.plugins.scala.*
    import org.gradle.api.plugins.sonar.*
    import org.gradle.api.plugins.sonar.model.*
    import org.gradle.api.publish.*
    import org.gradle.api.publish.ivy.*
    import org.gradle.api.publish.ivy.plugins.*
    import org.gradle.api.publish.ivy.tasks.*
    import org.gradle.api.publish.maven.*
    import org.gradle.api.publish.maven.plugins.*
    import org.gradle.api.publish.maven.tasks.*
    import org.gradle.api.publish.plugins.*
    import org.gradle.api.reporting.*
    import org.gradle.api.reporting.components.*
    import org.gradle.api.reporting.dependencies.*
    import org.gradle.api.reporting.model.*
    import org.gradle.api.reporting.plugins.*
    import org.gradle.api.resources.*
    import org.gradle.api.specs.*
    import org.gradle.api.tasks.*
    import org.gradle.api.tasks.ant.*
    import org.gradle.api.tasks.application.*
    import org.gradle.api.tasks.bundling.*
    import org.gradle.api.tasks.compile.*
    import org.gradle.api.tasks.diagnostics.*
    import org.gradle.api.tasks.incremental.*
    import org.gradle.api.tasks.javadoc.*
    import org.gradle.api.tasks.scala.*
    import org.gradle.api.tasks.testing.*
    import org.gradle.api.tasks.testing.junit.*
    import org.gradle.api.tasks.testing.testng.*
    import org.gradle.api.tasks.util.*
    import org.gradle.api.tasks.wrapper.*
    import org.gradle.authentication.*
    import org.gradle.authentication.http.*
    import org.gradle.buildinit.plugins.*
    import org.gradle.buildinit.tasks.*
    import org.gradle.external.javadoc.*
    import org.gradle.ide.cdt.*
    import org.gradle.ide.cdt.tasks.*
    import org.gradle.ide.visualstudio.*
    import org.gradle.ide.visualstudio.plugins.*
    import org.gradle.ide.visualstudio.tasks.*
    import org.gradle.ivy.*
    import org.gradle.jvm.*
    import org.gradle.jvm.application.scripts.*
    import org.gradle.jvm.application.tasks.*
    import org.gradle.jvm.platform.*
    import org.gradle.jvm.plugins.*
    import org.gradle.jvm.tasks.*
    import org.gradle.jvm.tasks.api.*
    import org.gradle.jvm.test.*
    import org.gradle.jvm.toolchain.*
    import org.gradle.language.assembler.*
    import org.gradle.language.assembler.plugins.*
    import org.gradle.language.assembler.tasks.*
    import org.gradle.language.base.*
    import org.gradle.language.base.artifact.*
    import org.gradle.language.base.plugins.*
    import org.gradle.language.base.sources.*
    import org.gradle.language.c.*
    import org.gradle.language.c.plugins.*
    import org.gradle.language.c.tasks.*
    import org.gradle.language.coffeescript.*
    import org.gradle.language.cpp.*
    import org.gradle.language.cpp.plugins.*
    import org.gradle.language.cpp.tasks.*
    import org.gradle.language.java.*
    import org.gradle.language.java.artifact.*
    import org.gradle.language.java.plugins.*
    import org.gradle.language.java.tasks.*
    import org.gradle.language.javascript.*
    import org.gradle.language.jvm.*
    import org.gradle.language.jvm.plugins.*
    import org.gradle.language.jvm.tasks.*
    import org.gradle.language.nativeplatform.*
    import org.gradle.language.nativeplatform.tasks.*
    import org.gradle.language.objectivec.*
    import org.gradle.language.objectivec.plugins.*
    import org.gradle.language.objectivec.tasks.*
    import org.gradle.language.objectivecpp.*
    import org.gradle.language.objectivecpp.plugins.*
    import org.gradle.language.objectivecpp.tasks.*
    import org.gradle.language.rc.*
    import org.gradle.language.rc.plugins.*
    import org.gradle.language.rc.tasks.*
    import org.gradle.language.routes.*
    import org.gradle.language.scala.*
    import org.gradle.language.scala.plugins.*
    import org.gradle.language.scala.tasks.*
    import org.gradle.language.scala.toolchain.*
    import org.gradle.language.twirl.*
    import org.gradle.maven.*
    import org.gradle.model.*
    import org.gradle.nativeplatform.*
    import org.gradle.nativeplatform.platform.*
    import org.gradle.nativeplatform.plugins.*
    import org.gradle.nativeplatform.tasks.*
    import org.gradle.nativeplatform.test.*
    import org.gradle.nativeplatform.test.cunit.*
    import org.gradle.nativeplatform.test.cunit.plugins.*
    import org.gradle.nativeplatform.test.cunit.tasks.*
    import org.gradle.nativeplatform.test.googletest.*
    import org.gradle.nativeplatform.test.googletest.plugins.*
    import org.gradle.nativeplatform.test.plugins.*
    import org.gradle.nativeplatform.test.tasks.*
    import org.gradle.nativeplatform.toolchain.*
    import org.gradle.nativeplatform.toolchain.plugins.*
    import org.gradle.platform.base.*
    import org.gradle.platform.base.binary
    import org.gradle.platform.base.component.*
    import org.gradle.platform.base.plugins.*
    import org.gradle.platform.base.test.*
    import org.gradle.play.*
    import org.gradle.play.distribution.*
    import org.gradle.play.platform.*
    import org.gradle.play.plugins.*
    import org.gradle.play.tasks.*
    import org.gradle.play.toolchain.*
    import org.gradle.plugin.use.*
    import org.gradle.plugins.ear.*
    import org.gradle.plugins.ear.descriptor.*
    import org.gradle.plugins.ide.api.*
    import org.gradle.plugins.ide.eclipse.*
    import org.gradle.plugins.ide.idea.*
    import org.gradle.plugins.javascript.base.*
    import org.gradle.plugins.javascript.coffeescript.*
    import org.gradle.plugins.javascript.envjs.*
    import org.gradle.plugins.javascript.envjs.browser.*
    import org.gradle.plugins.javascript.envjs.http.*
    import org.gradle.plugins.javascript.envjs.http.simple.*
    import org.gradle.plugins.javascript.jshint.*
    import org.gradle.plugins.javascript.rhino.*
    import org.gradle.plugins.javascript.rhino.worker.*
    import org.gradle.plugins.signing.*
    import org.gradle.plugins.signing.signatory.*
    import org.gradle.plugins.signing.signatory.pgp.*
    import org.gradle.plugins.signing.type.*
    import org.gradle.plugins.signing.type.pgp.*
    import org.gradle.process.*
    import org.gradle.sonar.runner.*
    import org.gradle.sonar.runner.plugins.*
    import org.gradle.sonar.runner.tasks.*
    import org.gradle.testing.jacoco.plugins.*
    import org.gradle.testing.jacoco.tasks.*
    import org.gradle.testkit.runner.*
    import org.gradle.util.*