Contents

Gradle 配置文件

1. 概述

在本文中,我们将了解 Gradle Java 项目的不同配置文件此外,我们将看到实际构建的详细信息。 您可以查看这篇文章 以了解 Gradle 的一般介绍。

2. 构建*.gradle*

假设我们只是通过运行gradle init –type java-application创建一个新的 Java 项目。这将为我们留下一个具有以下目录和文件结构的新项目:

build.gradle
gradle    
    wrapper
        gradle-wrapper.jar
        gradle-wrapper.properties
gradlew
gradlew.bat
settings.gradle
src
    main
        java  
            App.java
    test      
        java
            AppTest.java

我们可以将build.gradle文件视为项目的心脏或大脑。我们示例的结果文件如下所示:

plugins {
    id 'java'
    id 'application'
}
mainClassName = 'App'
dependencies {
    compile 'com.google.guava:guava:23.0'
    testCompile 'junit:junit:4.12'
}
repositories {
    jcenter()
}

它由 Groovy 代码组成,或者更准确地说,是用于描述构建的基于 Groovy 的 DSL(领域特定语言)。我们可以在这里定义我们的依赖关系,还可以添加用于依赖解析的 Maven 存储库之类的东西。

Gradle 的基本构建块是项目和任务。在这种情况下,由于应用了 java插件,构建 Java 项目所需的所有任务都被隐式定义。其中一些任务是assemblecheckbuildjarjavadocclean等等。

这些任务也以这样的方式设置,它们为 Java 项目描述了一个有用的依赖关系图,这意味着通常足以执行构建任务,Gradle(和 Java 插件)将确保执行所有必要的任务.

如果我们需要额外的特殊任务,例如构建一个 Docker 镜像,它也会进入build.gradle文件。最简单的任务定义如下所示:

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

我们可以通过将任务指定为 Gradle CLI 的参数来运行任务,如下所示:

$ gradle -q hello
Hello Blogdemo!

它不会做任何有用的事情,但会打印出“Hello Blogdemo!” 当然。

在多项目构建的情况下,我们可能会有多个不同的build.gradle文件,每个项目一个。

build.gradle文件针对一个 Project 实例执行,每个子*Project * 创建一个 Project 实例。上述任务可以在build.gradle文件中定义,作为*Task * 对象集合的一部分驻留在Project实例中。Tasks 本身包含多个操作作为有序列表。

在我们之前的示例中,我们添加了一个 Groovy 闭包来打印“Hello Blogdemo!” 通过在我们的hello Task对象上调用doLast(Closure action)到此列表的末尾 。在Task执行期间,Gradle 通过调用 Action.execute(T)方法按顺序执行其每个Actions

3. settings.gradle

Gradle 还会生成一个settings.gradle文件:

rootProject.name = 'gradle-example'

settings.gradle文件也是一个 Groovy 脚本。

build.gradle文件相比,每个 Gradle 构建只执行一个settings.gradle文件。我们可以使用它来定义多项目构建的项目。

此外,我们还可以将代码注册为构建的不同生命周期挂钩的一部分。

该框架要求在多项目构建中存在settings.gradle,而对于单项目构建是可选的。

该文件在创建构建的设置 实例后使用,通过对其执行文件并对其进行配置。这意味着我们在settings.gradle文件中定义子项目,如下所示:

include 'foo', 'bar'

Gradle在创建构建时调用Settings实例上的*void include(String… projectPaths)*方法。

4. gradle.properties

Gradle 默认不会创建gradle.properties文件。它可以驻留在不同的位置,例如项目根目录、GRADLE_USER_HOME内部或-Dgradle.user.home*命令行标志指定的位置。*

该文件由键值对组成。我们可以使用它来配置框架本身的行为,它是使用命令行标志进行配置的替代方法。 可能的键示例如下:

  • org.gradle.caching=(true,false)
  • org.gradle.daemon=(true,false)
  • org.gradle.parallel=(true,false)
  • org.gradle.logging.level=(quiet,warn,lifecycle,info,debug)

此外,您可以使用此文件将属性直接添加到Project对象,例如,具有其命名空间的属性:  org.gradle.project.property_to_set

另一个用例是像这样指定 JVM 参数:

org.gradle.jvmargs=-Xmx2g -XX:MaxPermSize=256m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8

请注意,它需要启动一个 JVM 进程来解析gradle.properties文件。这意味着这些 JVM 参数仅影响单独启动的 JVM 进程。

5. 简而言之构建

我们可以将 Gradle 构建的一般生命周期总结如下,假设我们不将它作为守护进程运行:

  • 它作为一个新的 JVM 进程启动
  • 它解析 gradle.properties文件并相应地配置 Gradle
  • 接下来,它为构建创建一个 Settings实例
  • 然后,它 根据Settings对象评估settings.gradle文件
  • 它根据配置的Settings对象创建Projects的层次结构
  • 最后,它针对其项目执行每个build.gradle文件