【问题标题】:Applying org.jetbrains.kotlin.jvm within custom Gradle plugin not working在自定义 Gradle 插件中应用 org.jetbrains.kotlin.jvm 不起作用
【发布时间】:2021-02-01 13:26:53
【问题描述】:

我正在使用 Kotlin 编写自定义 Gradle 插件。目标是在此自定义插件中应用配置某些插件。消费者应该只需要应用自定义插件并准备就绪。

问题: 我想在自定义插件中应用这两个 kotlin 插件(和其他插件)(通常可以在 Gradle 构建脚本中这样应用):

kotlin("jvm") version "1.4.10"
kotlin("plugin.spring") version "1.4.10"

但是在我自己的插件中应用它们时,出现了一些问题。

  1. 找不到jar 任务。我在使用我的插件的项目中收到此投诉。
  2. dependencies 部分的内容,例如 apiimplementation 等也会导致错误,例如 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


    【解决方案1】:

    我解决了。问题是如何我应用了这个插件。

    工作:

    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"
    }
    

    【讨论】:

      猜你喜欢
      • 2019-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多