我有一个通过 Maven 作为 AAR 分发的 Android 库。为了让我的库正常工作,应用程序需要下载一个文件并将其存储到其资产文件夹中。我在我的库的
build.gradle
文件中创建了一个任务来执行此操作。
当应用程序通过 Maven 使用我的 AAR 时,它无法找到任务。怎么了?
我的任务:
tasks.register('customDownload', CustomDownloadTask)
class CustomDownloadTask extends DefaultTask {
@TaskAction
void doTask() {
//Do the work
}
}
在图书馆项目中我可以做:
./gradlew customDownload
但是如果我在应用程序项目中这样做,通过 maven 下载 AAR 就会失败,并显示
Task 'customDownload' not found in root project...
这可以实现吗?如何实现?
由于您的项目是一个多模块项目,因此您不能只按原样运行
customDownload
任务,正如错误告诉您该任务在根项目中不存在一样,因此您将拥有在任务前面添加项目路径前缀(例如 :lib:
)以使其正常工作。这也记录在命令行用法中。
在多项目构建中,可以使用 : 分隔子项目名称和任务名称来执行子项目任务。从根项目运行时,以下内容是等效的:
$ gradle :subproject:taskName
$ gradle subproject:taskName
您还可以使用仅包含任务名称的任务选择器为所有子项目运行任务。
以下命令在从项目根目录调用时运行所有子项目的测试任务:
$ gradle test
假设您的库位于
library/
文件夹(其中有 build.gradle
/build.gradle.kts
文件):
./gradlew :library:customDownload
如果您使用的 IDE 显示项目所具有的 Gradle 任务的树视图(例如 IntelliJ),您还可以尝试从那里手动调用 Gradle 任务。