0

Gradleファイル内でタスクの依存関係のリストを取得して、onlyIfそれらに句を追加したいと思います(タスク依存関係のブランチをオフにすることができます-Gradleで無効なタスクの依存関係の実行をスキップすることに関連していますか?) . これはどのように行うことができますか?

例えば:

def shouldPublish = {
    def propertyName = 'publish.dryrun'

    !project.hasProperty(propertyName) || project[propertyName] != 'true'
}

subprojects {
    publish {
        onlyIf shouldPublish
        // the following doesn't work;the gist is that publish's dependencies should be turned off, too
        dependencies {
            onlyIf shouldPublish
        }
    }
}

次に、コマンドラインで次のことができます。

gradlew -Ppublish.dryrun=true publish
4

1 に答える 1

1

以下の作品:

def recursivelyApplyToTaskDependencies(Task parent, Closure closure) {
    closure(parent)

    parent.dependsOn.findAll { dependency ->
        dependency instanceof Task
    }.each { task ->
        recursivelyApplyToTaskDependencies(task, closure)
    }
}

def shouldPrune = { task ->
    def propertyName = "${task.name}.prune"

    project.hasProperty(propertyName) && project[propertyName] == 'true'
}

/*
 * Prune tasks if requested. Pruning means that the task and its dependencies aren't executed.
 *
 * Use of the `-x` command line option turns off the pruning capability.
 *
 * Usage:
 *   $ gradlew -Ppublish.prune=true publish # won't publish
 *   $ gradlew -Ppublish.prune=false publish # will publish
 *   $ gradlew -Dorg.gradle.project.publish.prune=true publish # won't publish
 *   $ gradlew -Dorg.gradle.project.publish.prune=false publish # will publish
 */
gradle.taskGraph.whenReady { taskGraph ->
    taskGraph.getAllTasks().each { task ->
        def pruned = shouldPrune(task)

        if (pruned) {
            recursivelyApplyToTaskDependencies(task) { p ->
                p.enabled = false
            }
        }
    }
}
于 2013-09-18T16:27:25.173 に答える