Je suis ce guide pour Dockerize une application Spring Boot . Le fait est que j'utilise le DSL Kotlin de Gradle et que j'ai du mal à convertir la syntaxe Groovy originale en Kotlin.
Voici le Groovy original du guide:
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") // ... }
Voici le Kotlin que j'ai jusqu'à présent:
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"]) }
3 Réponses :
Je n'ai pas encore essayé ce qui suit, donc il faudra peut-être quelques ajustements, mais je pense que ce dont vous avez besoin est à peu près ceci:
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")) }
La réponse de Yoni Gibbs est un bon début, mais c'est ce qui a fonctionné pour moi:
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")) }
Vous ne devriez pas faire la copie si vous connaissez le chemin du pot ...
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")) }