首页 > 解决方案 > 如何为此 Gradle 任务制作插件?

问题描述

我的项目中有一些 Gradle 配置,它为集成测试创建了一个额外的源集,以及一个运行它们的任务:

    sourceSets {
        create("integrationTest") {
            compileClasspath += sourceSets.main.get().compileClasspath + sourceSets.main.get().output
            runtimeClasspath += sourceSets.main.get().runtimeClasspath
        }
    }

    task("integrationTest", type = Test::class) {
        testClassesDirs = sourceSets["integrationTest"].output.classesDirs
        classpath = sourceSets["integrationTest"].runtimeClasspath
        outputs.upToDateWhen { false }
    }

    tasks.withType<Test> {
        useJUnitPlatform()
    }

我正在将其转换为插件,因此我可以轻松地重用它:

class IntegrationTestPlugin : Plugin<Project> {
    override fun apply(project: Project) {
        project.plugins.withType(JavaPlugin::class.java) {
            val sourceSets = project.properties["sourceSets"] as SourceSetContainer
            val sourceSet = sourceSets.create("integrationTest") {
                val main = sourceSets.getByName("main")
                compileClasspath += main.compileClasspath + main.output
                runtimeClasspath += main.runtimeClasspath
            }

            project.tasks.create("integrationTest", Test::class.java) {
                useJUnitPlatform()
                testClassesDirs += sourceSet.output.classesDirs
                classpath = sourceSet.runtimeClasspath
                outputs.upToDateWhen { false }
            }
        }
    }
}

问题是,当我integrationTest从插件运行任务时,它也会尝试从test源集运行测试,然后因为它们不在类路径上而失败。

如何修复插件,使其不会尝试这样做?

对于奖励积分:为什么插件的行为与原始代码不同?

标签: kotlingradlepluginsgradle-plugin

解决方案


推荐阅读