Передача параметров в надежную задачу пользовательской задачи - PullRequest
0 голосов
/ 17 июня 2020

Существует задача, которая может быть выполнена с таким параметром:

./gradlew taskX -Pkey=value

И плагин с настраиваемой задачей, которая должна выполняться taskX:

class CustomPlugin : Plugin<Project> {
    override fun apply(project: Project) {
        project.tasks.register("custom", CustomTask::class.java)
            .configure {
                it.description = "Description"
                it.group = "Group"

                val taskX = project.getTasksByName("taskX", true).first()

                it.dependsOn(taskX)
            }
    }
}

Я ожидал бы чего-то вроде это например:

it.dependsOn(taskX, "key=value")

Как передать параметры в dependsOn?

1 Ответ

1 голос
/ 17 июня 2020

Простой ответ: вы не можете. Только зависимости задач express что нужно сделать заранее, не как это нужно сделать.


Позвольте мне показать вам простой пример, почему что-то подобное невозможно в системе задач Gradle:

Во-первых, нам нужно знать, что в Gradle каждая задача будет выполняется только один раз за один вызов (часто называемый сборкой). Теперь представьте задачу, которую нужно запустить перед двумя задачами, не связанными друг с другом. Хорошим примером из реальной жизни является задача compileJava из Java плагина , от которого зависят как задача test, так и задача jar. Если dependsOn будет поддерживать параметры, может случиться так, что две задачи будут зависеть от одной задачи с разными параметрами. Какие параметры следует использовать в этом случае?

В качестве решения вы можете настроить другую задачу прямо в вашем плагине. Если вы хотите передать параметр, только если ваша настраиваемая задача запущена, вам может потребоваться добавить другую задачу, которая запускается как установка и применяет требуемую конфигурацию к фактической задаче:

task setup {
    doFirst {
        // apply configuration
    }
}

taskX.mustRunAfter setup

task custom {
    dependsOn setup
    dependsOn taskX
}

В этом примере используется Groovy, но должно быть возможно преобразовать его в Kotlin и использовать в своем плагине.


Редактировать относительно фактического параметра

Если честно , Я не очень хорошо знаком с плагином Android Gradle, но если я получу эту документацию правильно, свойство проекта android.testInstrumentationRunnerArguments.annotation будет просто альтернативой использованию следующего кода в скрипте сборки:

android {
    defaultConfig {
        testInstrumentationRunnerArgument 'annotation', '<some-value>'
    }
}

Вы можете попробовать определить следующую задачу, а затем запустить ее, используя ./gradlew customTest

task customTest {
    doFirst {
        android.defaultConfig.testInstrumentationRunnerArgument 'annotation', '<some-value>'
    }
    finalizedBy 'connectedAndroidTest'
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...