繁体   English   中英

Gradle:如何实际使用自定义依赖项配置或将外部依赖项交换为本地依赖项?

[英]Gradle: How do I actually use a custom dependency configuration OR swap external dependencies for local ones?

在Gradle中,给定自定义的依赖项配置,在Android中实际使用/编译的最简单方法是什么? 另外,在“本地”和“外部”依赖关系之间切换的最佳方法是什么?

问题

为了简化构建并更好地利用多项目构建,我创建了一个顶层“聚合器”项目,其他人可能会也可能不会使用。 因此,对子项目的任何修改都必须包含在聚合器中。

在此聚合器的构建过程中,我想始终使用子项目的本地版本(即我正在编辑的源代码),而不是使用我们存储库中的已编译工件。 另外,此聚合器将在我们的持续集成环境中使用,这样所有子项目的单元测试都将在每次代码提交时运行。

详细信息:部分解决方案

给定类似于以下内容的扁平文件夹结构,其中所有项目/模块都已解耦,以使孩子对父母一无所知。

+ Parent Aggregator Project
|---- build.gradle
|---- settings.gradle
|   + app                  
|   |---- build.gradle
|   + models               
|   |---- build.gradle
|   + networking           
|   |---- build.gradle
|   + utils                
|   |---- build.gradle

我在最顶层的项目中创建了以下build.gradle文件:

allprojects {
    configurations {
        localProjects {
            extendsFrom compile
        }
    }
}

project(':app') {
    dependencies {
        localProjects project(':models')
        localProjects project(':networking')
    }
}

project(':networking') {
    dependencies {
        localProjects project(':utils')
    }
}

localProjects配置正常运行,并且每个配置都已成功地用本地项目替换了现有的依赖项(例如“ com.mycompany:utils:1.0.0”和“ com.mycompany:models:1.0.0”)。 唯一的问题是我不知道如何让Android使用“ localProjects”依赖集而不是“编译”依赖集。

在纯Java示例中,我已经看到人们手动替换sourceSet中的类路径,但这对于Android插件来说并不容易。

摘要

您如何将Android版本指向自定义依赖项配置,使其使用这些依赖项而不是compiledebugCompilereleaseCompile的依赖项进行构建?

最终,我只希望增量构建能够正常工作。 例如,如果我编辑“模型”源代码,则:

  • 下次我构建应用程序时,它将重新编译“模型”项目
  • 它不会重新编译“网络”或“实用程序”代码
  • 这些更改会在构建一次后立即显示在应用程序中(即不再在3个或4个地方构建新建筑物,只是为了生成带有“最新”的APK)
  • 当我对这些项目中的任何一个进行代码更改时,我所要做的就是从聚合器项目中运行构建,并进行正确的编译,生成的APK反映了我计算机上的最新代码。
  • 同样,我可以只从聚合器运行所有单元测试
  • 最后但并非最不重要的一点是,我无法编辑现有项目来完成此任务。 所有更改都必须是自包含的,因为项目中还有其他工程师可能不选择使用它。

这是一个非常常见的用例,Gradle团队提到了将来会为这种事情增加更好的支持。 同时,我们该如何解决?

您无法真正做到这一点-子项目受到“聚合器项目”的影响。 相反,您可以做的是使它成为可配置的,而不管是在内部还是在外部(对子项目构建和整个构建而言)都解决特定的依赖关系。 有关概念证明,请参见https://github.com/pniederw/elastic-deps

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM