【发布时间】:2021-02-01 13:26:53
【问题描述】:
我正在使用 Kotlin 编写自定义 Gradle 插件。目标是在此自定义插件中应用和配置某些插件。消费者应该只需要应用自定义插件并准备就绪。
问题: 我想在自定义插件中应用这两个 kotlin 插件(和其他插件)(通常可以在 Gradle 构建脚本中这样应用):
kotlin("jvm") version "1.4.10"
kotlin("plugin.spring") version "1.4.10"
但是在我自己的插件中应用它们时,出现了一些问题。
- 找不到
jar任务。我在使用我的插件的项目中收到此投诉。 -
dependencies部分的内容,例如api、implementation等也会导致错误,例如 Gradle 不了解它们是什么。
但是,在使用项目中,我可以简单地将下面的行添加到构建脚本中,以恢复 jar 任务,并使 dependencies 再次工作:
kotlin("jvm") version "1.4.10"
我还在消费 Gradle 构建中编写了一种调试函数,只是为了查看应用了哪些插件。当我 only 应用我自己的插件(或手动将 kotlin-jvm 添加到脚本中)时,它们都会打印 true。在我看来,我自己的插件正在发挥作用。
open class GreetingTask : DefaultTask() {
@TaskAction
fun greet() {
println("hello from GreetingTask")
println(project.pluginManager.hasPlugin("org.springframework.boot"))
println(project.pluginManager.hasPlugin("io.spring.dependency-management"))
println(project.pluginManager.hasPlugin("com.github.ben-manes.versions"))
println(project.pluginManager.hasPlugin("org.jetbrains.kotlin.jvm"))
println(project.pluginManager.hasPlugin("org.jetbrains.kotlin.plugin.spring"))
println(project.pluginManager.hasPlugin("java"))
}
}
到目前为止,我的插件中的应用方法:
override fun apply(project: Project) {
configureRepositories(project)
configureTesting(project)
configureJava(project)
configureSpringBoot(project)
configureSpringDependencyManagement(project)
configureKotlin(project)
configureVersions(project)
configurePublishing(project)
}
对于设置 Kotlin:
private fun configureKotlin(project: Project) {
project.pluginManager.apply("org.jetbrains.kotlin.jvm")
project.pluginManager.apply("org.jetbrains.kotlin.plugin.spring")
project.tasks.withType(KotlinCompile::class.java).configureEach { task ->
task.kotlinOptions.freeCompilerArgs = listOf("-Xjsr305=strict")
task.kotlinOptions.jvmTarget = "11"
}
}
所有其他 configureXYZ 似乎都运行良好。
【问题讨论】:
标签: kotlin gradle gradle-plugin