Gradle 依赖时自定义渐变任务属性

Gradle 依赖时自定义渐变任务属性,gradle,android-gradle-plugin,gradle-plugin,Gradle,Android Gradle Plugin,Gradle Plugin,我创建了一个自定义任务,该任务应该处理gradle依赖项任务的输出(确切地说是/gradlew依赖项——配置myFlavorDebugRuntimeClasspath)。我想为每个buildVariant创建自定义任务(PassportGenerateTask passportGen=project.tasks.create(“PassportGenerate${variantName}”,PassportGenerateTask)) 但是我不能为每个passportGen自定义dependen

我创建了一个自定义任务,该任务应该处理gradle
依赖项
任务的输出(确切地说是
/gradlew依赖项——配置myFlavorDebugRuntimeClasspath
)。我想为每个buildVariant创建自定义任务(
PassportGenerateTask passportGen=project.tasks.create(“PassportGenerate${variantName}”,PassportGenerateTask)

但是我不能为每个passportGen自定义dependenciesReportTask属性。当我为特定的buildVariant调用passportGen时,它使用所有(project.android.applicationVariants.all)中最后一个构建变量的dependenciesReportTask.setProperty(“配置”,…)

例如,如果我有以下构建变量(googleDebug googleRelease samsungDebug samsungRelease)并调用passportGen任务(
/gradlew PasportGenerateGogleDebug
),它将为dependenciesReportTask使用错误的属性(配置将是samsungReleaseRuntimeClasspath配置)


在我的自定义PassportGenerateTask任务主操作方法(@TaskAction)中,但在其他任务中调用execute是不推荐使用的功能,将在gradle 5.0中删除它不仅不推荐使用,这纯粹是内部实现细节,很可能做了而不是做了您期望它做的事情,并且几乎总是产生比它试图解决的问题多得多的问题,并且实际上失败了


您很可能也不应该强奸
依赖项
任务。如果您需要具有不同配置的多个此类任务,只需创建类型为
DependencyReportTask
的新任务,并根据需要对其进行配置。

我使用“dependencies”,因为它可以为特定配置生成dependencies报告文件。我在“PassportGenerateTask”中使用此报告文件。如何在“DependencyReportTask”中创建依赖项报告文件?
Dependency
是类型为
DependencyReportTask
的任务。如果创建相同类型的其他任务,则它们具有相同的功能。
class AppPlugin implements Plugin<Project> {


    void apply(Project project) {

        project.afterEvaluate {
            // Create tasks for each Build Variant
            project.android.applicationVariants.all { ApplicationVariant variant ->
                def variantName = variant.name.capitalize()
                def variantOutput = variant.outputs.first()



                //Generating configuration name for dependency report
                def configurationName = ""
                if (variant.productFlavors.size() > 0) {
                    configurationName += variant.productFlavors.get(0).name
                    configurationName += variant.getBuildType().name.capitalize()
                } else {
                    configurationName += variant.getBuildType().name
                }
                configurationName += "RuntimeClasspath"

                def configurations = project.configurations.collect()

                configurations.removeAll {
                    !it.name.equals(configurationName)
                }


                //prepare file for output of "dependencies" tasks
                def depReportFileName = "dependeciesReport${variantName}.txt"
                def dependenciesReportOutputFile = new File(depReportFileName)


                //Get "dependencies" task from all project tasks
                def dependenciesReportTask = project.tasks["dependencies"]
                dependenciesReportTask.setProperty("configurations", configurations)
                dependenciesReportTask.setProperty("outputFile", dependenciesReportOutputFile)


                //create cutom task for every buildVariant which depends on "dependencies" task
                PassportGenerateTask passportGen = project.tasks.create("pasportGenerate${variantName}", PassportGenerateTask)
                passportGen.variant = variant
                passportGen.configuration = configurations.collect().get(0)

                //add dependency on "dependencies"
                passportGen.dependsOn dependenciesReportTask

            }
        }
    }
}
def dependenciesReportTask = project.tasks["dependencies"]
dependenciesReportTask.setProperty("configurations", configurations)
dependenciesReportTask.setProperty("outputFile", dependenciesReport)
dependenciesReportTask.execute()