Gradle 依赖时自定义渐变任务属性
我创建了一个自定义任务,该任务应该处理gradleGradle 依赖时自定义渐变任务属性,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
依赖项
任务的输出(确切地说是/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()