在自定义Gradle插件中应用org.jetbrains.kotlin.jvm不起作用

在自定义Gradle插件中应用org.jetbrains.kotlin.jvm不起作用,kotlin,gradle,gradle-plugin,Kotlin,Gradle,Gradle Plugin,我正在使用Kotlin编写一个定制的Gradle插件。目标是在这个自定义插件中应用和配置某些插件。消费者只需应用自定义插件,就可以完成所有设置 问题: 我想在自定义插件中应用这两个kotlin插件(和其他插件)(通常在Gradle构建脚本中可以这样应用): 但是当从我自己的插件中应用它们时,有两件事出了问题 未找到jar任务。我在使用我的插件的项目中收到了这个投诉 依赖项部分的内容,例如api,实现等也会导致错误,比如Gradle不理解它们是什么 但是,在消费项目中,我可以简单地将下面的行添加到

我正在使用Kotlin编写一个定制的Gradle插件。目标是在这个自定义插件中应用和配置某些插件。消费者只需应用自定义插件,就可以完成所有设置

问题: 我想在自定义插件中应用这两个kotlin插件(和其他插件)(通常在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"
    }