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 项目所需的所有任务都被隐式定义。其中一些任务是assemble、check、build、jar、javadoc、clean等等。
这些任务也以这样的方式设置,它们为 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文件