在自定义Gradle插件中应用org.jetbrains.kotlin.jvm无法正常工作

时间:2020-10-18 17:03:17

标签: kotlin gradle gradle-plugin

我正在使用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构建中编写了一种调试功能,只是为了了解应用了哪些插件。当我仅应用 我自己的插件时(或手动将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"))
    }
}

到目前为止,我在插件中的apply方法:

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似乎都可以正常工作。

1 个答案:

答案 0 :(得分:0)

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

有效:

build.gradle.kts

awk -F'\t' '
/Consequence/   { gfmt=1 ; next }
/ID_Sample/     { gfmt=0 }

# gfmt==1 => parse data based on the g(ene) file format

gfmt==1           { match($5, / ([A-Z0-9]{2,})/, a)
                  gene=a[1]
                  print gene

                  split($1,a,/[:-]/)
                  gstart=a[2]
                  gend=a[3]

                  split($3,a,">")
                  gref=substr(a[1],length(a[1]),1)
                  gsample=a[2]

                  match($5, /([A-Z][0-9]+[A-Z])/, a)
                  hgvps="p," a[1]

                  garray[gene,gstart,gend,gref,gsample]
                  hgarray[gene,hgvps]

                }
# gfmt==0 => parse data based on Sample_1.tsv file format

gfmt==0           { if ( FNR==1 ) { print $0 ; next }

                  gene=$1
                  gstart=$3
                  gend=$4
                  gref=$6
                  gsample=$7

                  hgvps=$9
                  if ( (gene,gstart,gend,gref,gsample) in garray || (gene,hgvps) in hgarray )
                      { print $0 }
                }

' *.tsv xx/Sample_1.tsv

确实有效

settings.gradle.kts

buildscript {
    repositories {
        mavenLocal()
        gradlePluginPortal()
    }
    dependencies {
        classpath("com.praqma:demo:1.0.0")
    }
}

apply(plugin = "com.praqma.demo.DemoPlugin")

build.gradle.kts

pluginManagement {
    repositories {
        mavenLocal()
        gradlePluginPortal()
    }
}