如何使用 Gradle Kotlin DSL 对 Spring 启动应用程序进行 Dockerize
How to Dockerize a Spring Boot application with Gradle Kotlin DSL
我正在按照本指南前往 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")
// ...
}
我还没有真正尝试过下面的方法,所以它可能需要一些调整,但我认为你需要的大致是这样的:
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"))
}
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"))
}
如果您知道 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"))
}
我正在按照本指南前往 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")
// ...
}
我还没有真正尝试过下面的方法,所以它可能需要一些调整,但我认为你需要的大致是这样的:
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"))
}
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"))
}
如果您知道 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"))
}