Установите аргументы используя Android плагин gradle dsl из задачи gradle - PullRequest
0 голосов
/ 17 апреля 2020

Я работаю над плагином Gradle для android, который должен программно установить аргумент для процессора аннотаций. "-AoutputDir=my.path.to.output.dir".

Итак, из функции Gradle Plugin apply() я ссылаюсь на все подпроекты и с помощью Android gradle plugin dsl Я попытался установить аргумент, выполнив это

private fun addAnnotationProcessorOptions(rootProject: Project, outDir: File) {
        rootProject.subprojects {
            it.also { project ->
                project.afterEvaluate {prj->
                    prj.plugins.all { plugin ->
                        when (plugin) {
                            is AppPlugin -> {
                                prj.extensions[AppExtension::class].run {
                                    defaultConfig.javaCompileOptions.annotationProcessorOptions.arguments(
                                            mapOf("outdir" to outDir.absolutePath)
                                    )
                                }
                            }

                            is LibraryPlugin -> {
                                prj.extensions[LibraryExtension::class].run {
                                    defaultConfig.javaCompileOptions.annotationProcessorOptions.arguments(
                                            mapOf("outdir" to outDir.absolutePath)
                                    )
                                }
                            }
                        }
                    }
                }
            }
        }
    }

, что переводит так же, как если бы я делал это в скрипте сборки каждого подпроекта

android {
    compileSdkVersion 29
    buildToolsVersion "29.0.2"


    defaultConfig {
        minSdkVersion 21
        targetSdkVersion 29
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
        consumerProguardFiles 'consumer-rules.pro'
        //HERE is the same call to the same dsl object
        javaCompileOptions {
            annotationProcessorOptions {
                arguments = ['outdir': 'path.to.output']
            }
        }
    }

Когда я пытаюсь получить аргумент outdir в моем процессоре аннотаций, это последний выдает исключение с жалобой на то, что аргумент outdir не найден. Однако, если я установлю аргумент outdir из сценария сборки, он без проблем получит его.

Я не могу установить аргумент из сценария сборки, так как мой сценарий использования требует, чтобы эта конфигурация была сделано программно.

PS: я использовал Project.beforeEvaluate{} и Project.afterEvaluate{} замыкания, но все еще не повезло.

Есть идеи о том, что происходит? Мой конфиг dsl get переоценен? Можно ли настроить это с помощью кода, а не сценария сборки?

Заранее спасибо.

...