我正在研究一个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:空
有人可以向我解释我做错了什么,理想情况下可以给我关于如何解决该问题的想法吗?
预先感谢