在自定义Gradle插件中应用org.jetbrains.kotlin.jvm不起作用
我正在使用Kotlin编写一个定制的Gradle插件。目标是在这个自定义插件中应用和配置某些插件。消费者只需应用自定义插件,就可以完成所有设置 问题: 我想在自定义插件中应用这两个kotlin插件(和其他插件)(通常在Gradle构建脚本中可以这样应用): 但是当从我自己的插件中应用它们时,有两件事出了问题在自定义Gradle插件中应用org.jetbrains.kotlin.jvm不起作用,kotlin,gradle,gradle-plugin,Kotlin,Gradle,Gradle Plugin,我正在使用Kotlin编写一个定制的Gradle插件。目标是在这个自定义插件中应用和配置某些插件。消费者只需应用自定义插件,就可以完成所有设置 问题: 我想在自定义插件中应用这两个kotlin插件(和其他插件)(通常在Gradle构建脚本中可以这样应用): 但是当从我自己的插件中应用它们时,有两件事出了问题 未找到jar任务。我在使用我的插件的项目中收到了这个投诉 依赖项部分的内容,例如api,实现等也会导致错误,比如Gradle不理解它们是什么 但是,在消费项目中,我可以简单地将下面的行添加到
jar
任务。我在使用我的插件的项目中收到了这个投诉依赖项
部分的内容,例如api
,实现
等也会导致错误,比如Gradle不理解它们是什么jar
任务,并使依赖项重新工作:
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")
pluginManagement {
repositories {
mavenLocal()
gradlePluginPortal()
}
}
plugins {
id("gradle.demoPlugin") version "0.0.1-SNAPSHOT"
}
这确实有效:
settings.gradle.kts
buildscript {
repositories {
mavenLocal()
gradlePluginPortal()
}
dependencies {
classpath("com.praqma:demo:1.0.0")
}
}
apply(plugin = "com.praqma.demo.DemoPlugin")
pluginManagement {
repositories {
mavenLocal()
gradlePluginPortal()
}
}
plugins {
id("gradle.demoPlugin") version "0.0.1-SNAPSHOT"
}
build.gradle.kts
buildscript {
repositories {
mavenLocal()
gradlePluginPortal()
}
dependencies {
classpath("com.praqma:demo:1.0.0")
}
}
apply(plugin = "com.praqma.demo.DemoPlugin")
pluginManagement {
repositories {
mavenLocal()
gradlePluginPortal()
}
}
plugins {
id("gradle.demoPlugin") version "0.0.1-SNAPSHOT"
}