Я работаю над POC, который показывает, что можно динамически переключаться между бинарной зависимостью и исходной зависимостью.
Рассмотрим следующий вариант использования: В контексте множественного репо у меня есть приложение Android (в репо A), которое зависит от проекта библиотеки (в репо B). При реализации новой функции в приложении для Android я должен также изменить проект библиотеки. Я хотел бы иметь возможность создавать приложение для Android (как локально, так и на CI-сервере) и использовать обновленную версию моего библиотечного проекта, которая еще не выпущена.
Локально, я знаю, что могу использовать функциональность составной сборки, но мне интересно, как заставить это работать для моего CI-сервера. Я не хочу клонировать каждый репозиторий для каждой сборки на тот случай, если одну из библиотек нужно будет собрать из исходного кода.
Решение, которое я мог найти, чтобы узнать, стоит ли мне собирать из исходного кода, смотрит на имя ветви git. Например, я начинаю реализовывать функцию A в проекте приложения Android, поэтому создаю ветку Feature A в репо A и ветку Feature A в репо B, чтобы также изменить проект библиотеки.
Что у меня сейчас есть:
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: не удалось разрешить
все зависимости для конфигурации
': Приложение: debugImplementationDependenciesMetadata. Вызванный:
java.lang.RuntimeException: проблемы чтения данных из двоичного хранилища в
/tmp/gradle7063330775827489046.bin (существует: истина) Причина:
java.lang.NullPointerException: null
Может кто-нибудь объяснить мне, что я делаю неправильно, и в идеале дать мне идеи о том, как решить эту проблему?
Заранее спасибо