在不更改源代码的情况下如何将bootBuildImage任务配置为最新

时间:2020-09-23 20:06:08

标签: spring-boot-gradle-plugin

我正在尝试使用spring boot 2.3的新支持来创建docker镜像,但是bootBuildImage gradle任务从来都不是最新的。不幸的是,即使没有更改源代码,这也会导致生成新的docker映像。

我的目标是拥有一个静态构建命令,该命令不会导致不必要地生成新图像。因此,类似于以下两种情况之一:

./gradlew bootBuildImage (but does nothing if no source code has changed)

OR

./gradlew someOtherTask (if this task is not up-to-date, it triggers bootBuildImage)

我最近的工作是将bootBuildImage配置为仅在bootJar任务不是最新的情况下运行:

tasks {
    val bootJarTask: TaskProvider<BootJar> = this.bootJar
    bootBuildImage {
        outputs.upToDateWhen {
            bootJarTask.get().state.upToDate
        }
    }
}

但这会因该错误而失败(由于某些原因,此特定任务讨厌jars作为输入)

> Unable to store input properties for task ':bootBuildImage'. Property 'jar' with value '/demo/build/libs/demo-0.0.1-SNAPSHOT.jar' cannot be serialized.

我肯定在这里缺少明显的东西!我需要bootBuildImage仅在必要时生成图像的原因是因为我有一个多项目构建。我不希望子项目生成并推送新图像,即使其中的任何内容都没有改变。

使用Spring Boot 2.3.4,Gradle 6.6.1,Java 11。

1 个答案:

答案 0 :(得分:0)

这似乎可行:

    val bootJarTask: TaskProvider<BootJar> = this.bootJar
    
    bootBuildImage {
        onlyIf {
            !bootJarTask.get().state.skipped
        }
    }