android - 依赖项的 Gradle 多项目递归任务

标签 android gradle android-gradle-plugin multi-project

配置:
我有这样的多项目限制

project1:
  implementation(1st_lvl_module1)
  implementation(1st_lvl_module2)
project2:
  implementation(1st_lvl_module1)
  implementation(1st_lvl_module2)
  implementation(1st_lvl_module3)
project3:
  implementation(1st_lvl_module2)

1st_lvl_module1:
  implementation(2nd_lvl_module1)
  implementation(2nd_lvl_module2)
1st_lvl_module2:
  implementation(2nd_lvl_module2)
1st_lvl_module3:
  implementation(2nd_lvl_module2)
  implementation(2nd_lvl_module3)

2nd_lvl_module1
2nd_lvl_module2
2nd_lvl_module3

问题:
我想为所有项目执行一些任务(例如 gradle test )。它可以根据顶级调用的要求工作。但我想为每个项目独立执行它,这里我有一个问题。
如果我调用 gradle project1:test它将仅对 project1 执行并且不包括 1st_lvl_module1这也实现了2nd_lvl_module1 and 2nd_lvl_module21st_lvl_module22nd_lvl_module2
  • 我试图实现自定义任务
    例如
  • tasks.register("testWithDependencies") { task ->
            task.dependsOn("test")
            configurations.forEach {
                it.dependencies.findAll { it instanceof ProjectDependency }.forEach {
                    dependsOn ":${it.name}:test"
                }
            }
        }
    
    通过这种方式,它也适用于第一级实现。gradle project1:testWithDependencies将执行 test project1 的任务, 1st_lvl_module11st_lvl_module2但仍然忽略2nd_lvl_module1 2nd_lvl_module2 .
  • 如果我确实执行此任务
    例如。
  • tasks.register("pd") { task ->
        configurations.forEach {
            println("Config name: ${it.name}")
            it.dependencies.findAll { it instanceof ProjectDependency }.forEach {
                def depProject = ((ProjectDependency)it).getDependencyProject()
                println("${depProject.name}")
                depProject.configurations.forEach {
                    println("---Config name: ${it.name}")
                }
            }
        }
    }
    
    我的 project1包含 implementation配置但全部1st_lvl_module*没有。其实configurations子模块列表看起来很差。

    问题:
    有人对多模块子项目结构有同样的问题吗?或者也许存在最简单的递归调用方法?

    最佳答案

    解决方案 :
    文件例如。 testWithDependency.gradle内容如下:

    tasks.register("testWithDependencies") { task ->
            task.dependsOn("test")
            configurations.forEach {
                it.dependencies.findAll { it instanceof ProjectDependency }.forEach {
                    dependsOn ":${it.name}:testWithDependencies"
                }
            }
        }
    
    应申请到底 (当验证项目的依赖关系时)gradle.build对于每个项目和模块。
    该解决方案还可以针对多个任务进行扩展。

    关于android - 依赖项的 Gradle 多项目递归任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63804556/

    相关文章:

    android - Google Play - 应用程序包的签名 key 错误

    java - 在 NetBeans 中使用参数运行 Gradle 应用程序

    值-b+sr+Latn 的 Android 构建错误

    android - setadapter后获取ListView高度

    java - Android - Mediaplayer 下一个按钮不起作用

    java - gradle 任务 ':app:compileDebugJavaWithJavac' 出错

    kotlin - 如何在 Gradle 中从 uri 生成 openapi 客户端

    android - 缺少 Google Services 3.0.0 的 api_key/current key 和 build.gradle 中的 Maps API key

    android - 如何在另一个库中包含一个 Android 库模块?

    android - 如何计算android 3.0(平板电脑)系统栏的高度?