【问题标题】:How to Dockerize a Spring Boot application with Gradle Kotlin DSL如何使用 Gradle Kotlin DSL 对 Spring Boot 应用程序进行 Dockerize
【发布时间】:2019-11-27 05:10:40
【问题描述】:

我正在关注Dockerize a Spring Boot application 的指南。关键是我正在使用 Gradle 的 Kotlin DSL,我无法将原始 Groovy 语法转换为 Kotlin。

这是指南中的原始 Groovy:

task unpack(type: Copy) {
    dependsOn bootJar
    from(zipTree(tasks.bootJar.outputs.files.singleFile))
    into("build/dependency")
}

docker {
    name "${project.group}/${bootJar.baseName}"
    copySpec.from(tasks.unpack.outputs).into("dependency")
    buildArgs(['DEPENDENCY': "dependency"])
}

这是我目前得到的 Kotlin:

import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

plugins {
    id("org.springframework.boot") version "2.2.0.M4"
    id("io.spring.dependency-management") version "1.0.7.RELEASE"
    id("com.palantir.docker") version "0.22.1"
    kotlin("jvm") version "1.3.31"
    kotlin("plugin.spring") version "1.3.31"
}

group = "com.something"
version = "1.0.0-SNAPSHOT"
java.sourceCompatibility = JavaVersion.VERSION_1_8

repositories {
    mavenCentral()
}

dependencies {
    implementation("org.springframework.boot:spring-boot-starter-webflux")
    implementation("org.jetbrains.kotlin:kotlin-reflect")
    implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
    // ...
}

【问题讨论】:

    标签: spring-boot docker gradle kotlin gradle-kotlin-dsl


    【解决方案1】:

    如果你知道 jar 的路径,你不应该做副本......

    configure<com.palantir.gradle.docker.DockerExtension> {
        dependsOn(tasks.findByPath("build"))
        name = "${project.name}:${version}"
        files("build/libs/${project.name}-${version}.jar")
        buildArgs(mapOf("JAR_FILE" to "${project.name}-${version}.jar"))
    }
    

    【讨论】:

      【解决方案2】:

      Yoni Gibbs 的回答提供了一个良好的开端,但这对我有用:

      import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
      import org.springframework.boot.gradle.tasks.bundling.BootJar
      
      plugins {
          id("org.springframework.boot") version "2.1.6.RELEASE"
          id("io.spring.dependency-management") version "1.0.7.RELEASE"
          kotlin("jvm") version "1.2.71"
          kotlin("plugin.spring") version "1.2.71"
          id("com.palantir.docker") version "0.22.1"
      }
      
      task<Copy>("unpack") {
          val bootJar = tasks.getByName<BootJar>("bootJar")
          dependsOn(bootJar)
          from(zipTree(bootJar.outputs.files.singleFile))
          into("build/dependency")
      }
      
      docker {
          val archiveBaseName = tasks.getByName<BootJar>("bootJar").archiveBaseName.get()
          name = "${project.group}/$archiveBaseName"
          copySpec.from(tasks.getByName<Copy>("unpack").outputs).into("dependency")
          buildArgs(mapOf("DEPENDENCY" to "dependency"))
      }
      

      【讨论】:

        【解决方案3】:

        我还没有真正尝试过下面的,所以它可能需要一些调整,但我认为你需要的大致是这样的:

        task<Copy>("unpack") {
            val bootJar = tasks.getByName<BootJar>("bootJar")
            dependsOn(bootJar)
            from(zipTree(bootJar.outputs.files))
            into("build/dependency")
        }
        
        docker {
            name = "${project.group}/${tasks.getByName<BootJar>("bootJar").archiveBaseName}"
            copySpec.from(tasks.getByName<Copy>("unpack").outputs).into("dependency")
            buildArgs(mapOf("DEPENDENCY" to "dependency"))
        }
        

        【讨论】:

          猜你喜欢
          • 2018-01-10
          • 2019-07-29
          • 2022-07-08
          • 2016-10-14
          • 2018-09-12
          • 2019-03-25
          • 2019-02-16
          • 2016-07-13
          • 1970-01-01
          相关资源
          最近更新 更多