在自定义 Gradle 插件中应用 org.jetbrains.kotlin.jvm 无效
Applying org.jetbrains.kotlin.jvm within custom Gradle plugin not working
我正在使用 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 构建中编写了一种调试功能,只是为了查看应用了哪些插件。当我只应用 我自己的插件(或手动将 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
似乎都很好。
我解决了。问题是我是如何应用插件的。
这不有效:
build.gradle.kts
buildscript {
repositories {
mavenLocal()
gradlePluginPortal()
}
dependencies {
classpath("com.praqma:demo:1.0.0")
}
}
apply(plugin = "com.praqma.demo.DemoPlugin")
这确实有效:
settings.gradle.kts
pluginManagement {
repositories {
mavenLocal()
gradlePluginPortal()
}
}
build.gradle.kts
plugins {
id("gradle.demoPlugin") version "0.0.1-SNAPSHOT"
}
我正在使用 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 构建中编写了一种调试功能,只是为了查看应用了哪些插件。当我只应用 我自己的插件(或手动将 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
似乎都很好。
我解决了。问题是我是如何应用插件的。
这不有效:
build.gradle.kts
buildscript {
repositories {
mavenLocal()
gradlePluginPortal()
}
dependencies {
classpath("com.praqma:demo:1.0.0")
}
}
apply(plugin = "com.praqma.demo.DemoPlugin")
这确实有效:
settings.gradle.kts
pluginManagement {
repositories {
mavenLocal()
gradlePluginPortal()
}
}
build.gradle.kts
plugins {
id("gradle.demoPlugin") version "0.0.1-SNAPSHOT"
}