Как передать Kotlin freeCompilerArgs через командную строку при выполнении задачи Gradle?

Контекст: этот вопрос относится к проекту приложения для Android, в котором используется Jetpack Compose для пользовательского интерфейса, и в основном фокусируется на создании метрик компилятора Compose через командную строку.


В моем корневом проекте градация настроена следующим образом:

subprojects {
    tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).configureEach {
        kotlinOptions {
            // Trigger this with:
            // ./gradlew assembleRelease -PenableComposeReports=true
            if (project.findProperty("enableComposeReports") == "true") {
                freeCompilerArgs += ["-P", "plugin:androidx.compose.compiler.plugins.kotlin:reportsDestination = " + rootProject.buildDir.absolutePath + "/compose_metrics/"]
                freeCompilerArgs += ["-P", "plugin:androidx.compose.compiler.plugins.kotlin:metricsDestination = " + rootProject.buildDir.absolutePath + "/compose_metrics/"]
            }
        }
    }
}

Когда я выполняю задачу assembleRelease gradle с помощью следующей команды:

./gradlew assembleRelease -PenableComposeReports=true, freeCompilerArgs настроены соответствующим образом для создания метрик компилятора Compose.


Теперь я хотел бы знать, можно ли передать эти freeCompilerArgs через CLI при выполнении самой задачи Gradle, не имея какой-либо конкретной конфигурации Gradle для создания метрик Compose Compiler.

Я пытаюсь создать инструмент CLI, который генерирует показатели компилятора Compose как часть своей функциональности, и я хотел бы иметь возможность запускать его в любом произвольном проекте Jetpack Compose, независимо от того, настроен ли gradle для создания показателей компилятора Compose (например, выше ) или нет.


Можно ли передать эти freeCompilerArgs через CLI? Что-то вроде:

./gradlew assembleRelease -Pkotlin.compiler.arguments = "plugin:androidx.compose.compiler.plugins.kotlin:reportsDestination=<path>”

Если нет, существуют ли какие-либо альтернативные способы создания метрик Compose Compiler через CLI для произвольного проекта (который может иметь или не иметь Gradle, настроенный для создания того же самого)?

0
0
65
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Эту проблему можно решить с помощью Gradle Init scripts.

Сценарии инициализации (они же сценарии инициализации) аналогичны другим скрипты в Gradle. Однако эти скрипты запускаются перед сборкой. начинается.

Итак, мы можем выполнить gradletask вместе с gradleinit script, что может настроить gradle для включения генерации метрик компилятора Compose.


// init.gradle
initscript {
    repositories {
        mavenCentral()
        google()
    }
    dependencies {
        classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.7.0")
        classpath("com.android.tools.build:gradle:7.4.2")
    }
}

allprojects {
    afterEvaluate {
        tasks.configureEach {
            if (it.class.name.contains("org.jetbrains.kotlin.gradle.tasks.KotlinCompile")) {
                kotlinOptions {
                    freeCompilerArgs += ["-P", "plugin:androidx.compose.compiler.plugins.kotlin:reportsDestination = " + rootProject.buildDir.absolutePath + "/reports/"]
                    freeCompilerArgs += ["-P", "plugin:androidx.compose.compiler.plugins.kotlin:metricsDestination = " + rootProject.buildDir.absolutePath + "/metrics/"]
                }
            }
        }
    }
}

И выполните gradle task как ./gradlew assembleRelease -I init.gradle, чтобы сгенерировать метрики компилятора Compose.


После того, как я задал этот вопрос в нескольких разных темах, это единственное решение, которое у меня есть для этой конкретной проблемы.

Огромное спасибо Никите Скворцову за ответ на этот вопрос в другой ветке , вся заслуга в том, что они придумали это решение. Также спасибо Бьорну Каутлеру за помощь мне в правильной настройке init.gradle сценария.

Другие вопросы по теме