配置 JVM 内存

org.gradle.jvmargs Gradle 属性控制运行构建的 VM。它默认为 -Xmx512m "-XX:MaxMetaspaceSize=384m"

您可以通过以下方式调整 Gradle 的 JVM 选项。

选项 1:更改构建 VM 的 JVM 设置

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

JAVA_OPTS 环境变量控制命令行客户端,它仅用于显示控制台输出。它默认为 -Xmx64m

选项 2:更改客户端 VM 的 JVM 设置

JAVA_OPTS="-Xmx64m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8"

有一种情况是客户端 VM 也可以用作构建 VM

如果您停用 Gradle 守护进程 并且客户端 VM 具有与构建 VM 所需相同的设置,则客户端 VM 将直接运行构建。

否则,客户端 VM 将派生一个新的 VM 来运行实际的构建,以遵守不同的设置。

某些任务,例如 test 任务,也会派生额外的 JVM 进程。您可以通过任务本身配置这些进程。它们默认使用 -Xmx512m

示例 1:为 Java 编译任务设置编译选项

build.gradle.kts
plugins {
    java
}

tasks.withType<JavaCompile>().configureEach {
    options.compilerArgs = listOf("-Xdoclint:none", "-Xlint:none", "-nowarn")
}
build.gradle
plugins {
    id 'java'
}

tasks.withType(JavaCompile).configureEach {
    options.compilerArgs += ['-Xdoclint:none', '-Xlint:none', '-nowarn']
}

请参阅 Test API 文档和 Java 插件参考中的测试执行 中的其他示例。

构建扫描 会在您使用 --scan 选项时告诉您有关执行构建的 JVM 的信息。

Build Environment in Build Scan

使用项目属性配置任务

可以根据在调用时指定的项目属性来更改任务的行为。

假设您希望确保发布构建仅由 CI 触发。一种简单的方法是使用 isCI 项目属性。

示例 1:防止在 CI 之外发布

build.gradle.kts
tasks.register("performRelease") {
    val isCI = providers.gradleProperty("isCI")
    doLast {
        if (isCI.isPresent) {
            println("Performing release actions")
        } else {
            throw InvalidUserDataException("Cannot perform release outside of CI")
        }
    }
}
build.gradle
tasks.register('performRelease') {
    def isCI = providers.gradleProperty("isCI")
    doLast {
        if (isCI.present) {
            println("Performing release actions")
        } else {
            throw new InvalidUserDataException("Cannot perform release outside of CI")
        }
    }
}
$ gradle performRelease -PisCI=true --quiet
Performing release actions