我已经通过 build.gradle 成功构建了旧的 Kotlin 项目:
tasks.jib.doLast {}
但我需要将其更改为 build.gradle.kts:
plugins {
kotlin("jvm")
id("application")
id("com.google.cloud.tools.jib")
}
group = "com.myproject"
version = "1.0-SNAPSHOT"
application {
mainClass.set("MainKt")
}
dependencies {
annotationProcessor("org.springframework.boot:spring-boot-starter-data-jdbc")
annotationProcessor("com.github.blagerweij:liquibase-sessionlock")
annotationProcessor("org.liquibase:liquibase-core:4.8.0")
annotationProcessor("org.postgresql:postgresql")
}
kotlin {
jvmToolchain {
languageVersion.set(JavaLanguageVersion.of("17"))
}
}
jib {
from.image = "amazoncorretto:17-alpine-jdk"
to {
image = "image"
tags = setOf("$version")
}
container.user = "nobody"
}
tasks.jib.configure {
dependsOn(provider {
tasks.jibDockerBuild
})
}
tasks.jib.doLast {
//some logic
}
现在我收到错误:
Line 32: doLast {
^ Unresolved reference: tasks.jib.doLast
也许我应该使用tasks.withType?但对于这个配置它也没有定义
tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile> {
kotlinOptions {
jib.doLast { }
}
}
感谢您的所有建议。
Groovy 代码
tasks.jib.doLast {
// someLogic
}
在 Kotlin 中应该替换为
tasks.jib.configure {
doLast {
// someLogic
}
}
事实上,您可以将该配置包含在之前的配置块中,因为它正在执行相同的操作:
tasks.jib.configure {
dependsOn(provider {
tasks.jibDockerBuild
})
doLast {
//some logic
}
}
请注意,这种差异是因为在 Kotlin DSL 中,
tasks.jib
是一个 TaskProvider
(通过 自动生成的访问器,因为它是在插件中定义的),但在 Groovy 中,它是 jib
Task
对象本身(通过 Groovy/Gradle 魔法,因为 tasks
是 NamedDomainObjectCollection
。
我鼓励您单击/悬停在构建脚本中的对象上;如果您使用合适的 IDE,这将告诉您它们是什么类型,并引导您找到可供它们使用的 API。