我正在使用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"))
}
}
到目前为止,我在插件中的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
似乎都可以正常工作。
答案 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()
}
}