如何在Gradle中仅构建已修改的模块和依赖项

n3h0vuf2  于 2023-02-04  发布在  其他
关注(0)|答案(1)|浏览(142)

我在monorepo模型中使用gitflow-incremental-builder和Maven,它允许我:

  • 仅在不同于主分支的功能分支中构建这些模块。
  • 仅生成自上次成功生成标记以来发生更改的这些模块。
  • 当库更改时,构建使用它的所有模块。
  • 如果需要,为模块构建库,但如果没有任何变化,则跳过测试(skipTestsForUpstreamModules
  • 强制生成所有。

使用git log解决更改,然后它会影响reactor配置。
我正在寻找一个类似的工具,将做它的Gradle。

0ejtzxu1

0ejtzxu11#

Gradle Build Cache将自动跟踪任务的输入和输出,并跳过任何未更改的任务。

启用Gradle构建缓存

可以通过添加gradle.properties在本地启用它

org.gradle.caching=true

或者通过向命令行添加标志

./gradlew tests --build-cache
共享生成缓存

一个项目的构建缓存可以通过HTTP在多台计算机上共享。远程共享构建缓存是不必要的-即使该高速缓存存储在本地,它仍然可以工作。

注册任务输入

Gradle需要了解任务的所有输入和输出,否则任务可能会被跳过,因此请确保它们已正确注册。
例如,如果某些集成测试依赖于环境变量,则将环境变量注册为测试任务输入。

// build.gradle.kts

tasks.named("integrationTest") {
  // TEST_TASK_QUALITY is used in integration tests to change <blah blah blah>
  // register it as an input so Gradle knows when to re-run the tests
  inputs.property("TEST_TASK_QUALITY", providers.environmentVariable("TEST_TASK_QUALITY"))
}
稳定的任务输出

Gradle将使用某些任务的输出作为其他任务的输入。如果输出不稳定,Gradle将始终重新运行相关任务。
因此,在所有项目中启用可重现的构建是值得的。

// build.gradle.kts

tasks.withType<AbstractArchiveTask>().configureEach {
    isPreserveFileTimestamps = false
    isReproducibleFileOrder = true
}

此外,请考虑对项目中的任何自定义文件进行输入规范化。

相关问题