如何使用KotlinDSL将插件延迟应用到Gradle中的子项目?

kiz8lqtg  于 4个月前  发布在  Kotlin
关注(0)|答案(1)|浏览(85)

我正试图将checkerframework插件(但我假设它可以是任何插件)懒洋洋地应用到我的java子项目。该子项目有几个项目,其中超过1个是java项目。
我的build.gradle.kts文件:

plugins {
    alias(buildscript.plugins.sonarqube)
    id("org.checkerframework") version "0.6.36"
}

subprojects {

    if (file("src/main/java").isDirectory) {
        apply(plugin = "org.checkerframework")
        checkerFramework {
            checkers = listOf("org.checkerframework.checker.nullness.NullnessChecker")
        }
    }
  ....
}

字符串
如果我运行一个.\gradlew.bat build --scan命令,我可以看到checkerframework任务没有被延迟创建,我可以看到创建了8个任务。

我试着把它改成下面的:

plugins {
    id("org.checkerframework") version "0.6.36"
}

subprojects {

    tasks.withType<JavaCompile>().configureEach {
        apply(plugin = "org.checkerframework")
        checkerFramework {
            checkers = listOf("org.checkerframework.checker.nullness.NullnessChecker")
        }
    }
    
    ...
}


但是它在子项目中给我错误

Could not determine the dependencies of task ':mysubproject1:jar'.
> Could not create task ':mysubproject1:compileJava'.
   > Failed to apply plugin 'org.checkerframework'.
      > DefaultTaskCollection#configureEach(Action) on task set cannot be executed in the current context.


懒惰地应用任务的正确方法是什么?

vaj7vani

vaj7vani1#

我认为你说的“lazy”是指:“我如何只在Java子项目中应用插件?”
答案是这样写:

subprojects {
   pluginManager.withPlugin("java-base") {
      // Apply Java-dependent plugin
   }
}

字符串

相关问题