在二进制依赖关系和源依赖关系之间动态切换

时间:2019-04-05 09:09:23

标签: gradle gradle-kotlin-dsl gradle-dependencies

我正在研究一个POC,该POC显示可以在二进制依赖项和源依赖项之间动态切换。 考虑以下用例:在多仓库环境中,我有一个Android应用程序(在仓库A中),该应用程序依赖于库项目(在仓库B中)。在Android应用程序中实现新功能时,我还必须修改库项目。我希望能够构建Android应用程序(在本地和CI服务器上)并使用尚未发布的库项目的更新版本。 在本地,我知道我可以使用复合构建功能,但是我想知道如何使它适用于CI服务器。我不想为每个构建都克隆每个存储库,以防万一其中一个库需要从源代码构建。

一个可以找到是否应该从源代码构建的解决方案是查看git分支名称。例如,我开始在Android应用程序项目中实现功能-A,因此我在存储库A中创建了功能-A分支,并在存储库B中创建了功能-A分支来修改库项目。

我目前拥有的是:

build.gradle.kts(Android应用-依赖项块内部)

val currentBranch = functionToGetCurrentBranch()
val libraryHasSameBranch = functionToChekIfRemoteRepoHasSameBranch()
if(libraryHasSameBranch) {
    add("implementation", "organization:library") {
        version {
            branch = currentBranch
        }
    }
} else {
    add("implementation","organization:library:version")
}

settings.gradle.kts(Android应用)

sourceControl {
    gitRepository(remoteRepositoryURI) {
        producesModule("organization:library")
    }
}

由于某种原因(必须有一个完全有效的值),当库项目的远程存储库中没有名称匹配的分支时,二进制依赖关系就会被提取,并且一切都可以正常编译,但是当找到匹配的分支,由于一个神秘的原因构建失败:

  

详细信息:org.gradle.api.artifacts.ResolveException:无法解决   配置的所有依赖项   ‘:app:debugImplementationDependenciesMetadata’。造成原因:   java.lang.RuntimeException:从二进制存储库中读取数据时出现问题   /tmp/gradle7063330775827489046.bin(存在:true)原因:   java.lang.NullPointerException:空

有人可以向我解释我做错了什么,理想情况下可以给我关于如何解决该问题的想法吗?

预先感谢

0 个答案:

没有答案