我在我的build.gradle
文件中应用了一个gradle插件,它提供了三个任务(每个构建变体一个),我想确保每次构建任务完成时都会运行这些任务。此外,我创建了另一个任务,我想在其中一个插件任务完成时运行。到目前为止,这是gradle文件:
apply plugin: 'com.android.library'
apply plugin: 'com.jaredsburrows.license'
android {
buildToolsVersion rootProject.ext.buildToolsVersion
compileSdkVersion rootProject.ext.compileSdkVersion
defaultConfig {
minSdkVersion rootProject.ext.minimumSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
// etc
}
buildTypes {
debug {
// etc
}
staging {
// etc
}
release {
// etc
}
}
}
task copyLicenseToSrc {
doLast {
// etc
}
}
build.finalizedBy(tasks.findByName('licenseDebugReport'))
tasks.findByName('licenseDebugReport').finalizedBy(copyLicenseToSrc)
jaredsburrows
插件会生成license*Report
个任务。每当我尝试使用tasks.getByName('licenseDebugReport)
或tasks.getByName('licenseReleaseReport)
引用任务时,我都会收到一个未找到任务的异常。
此处有任务窗格的屏幕截图供参考。
如何与插件定义的任务进行交互?
答案 0 :(得分:0)
似乎该插件会延迟这些任务。
你可以尝试三件我想到的事情。
1。尝试进一步延迟,在afterEvaluate { }
块中进行依赖项设置,这将在项目评估后执行,但仍处于配置阶段。
2。您可以使用LicenseReportTask
操作tasks.withType(LicenseReportTask) { build.finalizedBy it; it.finalizedBy copyLicense }
类型的所有任务。这将立即在该类型的所有现有任务上执行,并在将来添加后立即添加的所有任务上执行。
3。您可以使用插件使用的相同机制,尝试使用android.libraryVariants.all { variant -> build.finalizedBy tasks."license${variant.name.capitalize()}Report"; tasks."license${variant.name.capitalize()}Report".finalizedBy copyLicense }