Gradle:build.gradle与settings.gradle与gradle.properties

2025/04/30

1. 概述

在本文中,我们将研究Gradle Java项目的不同配置文件。此外,我们还将了解实际构建的详细信息。

你可以查看这篇文章来了解有关Gradle的一般介绍。

2. build.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 Tuyucheng!'
    }
}

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

$ gradle -q hello
Hello Tuyucheng!

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

如果是多项目构建,我们可能会有多个不同的build.gradle文件,每个项目一个。

build.gradle文件针对Project实例执行,每个子项目会创建一个Project实例。上述任务可以在build.gradle文件中定义,它们作为Task对象集合的一部分驻留在Project实例中。Task对象本身由多个操作组成,并以有序列表的形式呈现。

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

3. settings.gradle

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

rootProject.name = 'gradle-example'

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

与build.gradle文件不同,每次Gradle构建只会执行一个settings.gradle文件,我们可以用它来定义多项目构建的项目。

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

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

在创建构建的Settings实例后,通过执行该文件来配置它,从而使用它。这意味着我们在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

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

5. 构建概要

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

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

6. 总结

我们了解了不同的Gradle配置文件如何实现不同的开发目的,我们可以根据项目需求,使用它们来配置Gradle构建以及Gradle本身。

Show Disqus Comments

Post Directory

扫码关注公众号:Taketoday
发送 290992
即可立即永久解锁本站全部文章