如何在执行Gradle任务时通过命令行传递KotlinfreeCompilerArgs?

eagi6jfj  于 2023-04-30  发布在  Kotlin
关注(0)|答案(1)|浏览(197)

上下文:此问题与使用Jetpack Compose for UI的Android应用项目有关,主要关注通过命令行生成Compose编译器指标。
我的根项目有gradle配置如下:

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=truefreeCompilerArgs被适当地设置以生成Compose编译器度量。

现在,我想知道是否可以在执行gradle任务本身时通过CLI传递这些freeCompilerArgs,而无需任何特定的gradle配置来生成Compose Compiler Metrics。

我正在尝试构建一个CLI工具,作为其功能的一部分生成Compose编译器指标,我希望能够在任何Jetpack Compose项目上运行它,无论gradle是否配置为生成Compose编译器指标(如上所述)。
可以通过CLI传递这些freeCompilerArgs吗?,类似于:

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

如果没有,是否有其他方法可以通过CLI为任意项目生成Compose Compiler Metrics(它可能配置了Gradle来生成同样的数据)?

az31mfrm

az31mfrm1#

这个问题可以使用Gradle Init scripts解决。
初始化脚本(a.k.a. init脚本)类似于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/"]
                }
            }
        }
    }
}

并像执行./gradlew assembleRelease -I init.gradle一样执行gradle task以生成Compose编译器指标。
在多个不同的线程中提出这个问题后,这是迄今为止我对这个特定问题的唯一解决方案。
非常感谢Nikita Skvortsovanother thread中回答了这个问题,所有这些都归功于他们提出了这个解决方案。另外,感谢Björn Kautler for helping me,正确地设置了init.gradle脚本。

相关问题