Динамическое переключение между бинарной зависимостью и исходной зависимостью - PullRequest
0 голосов
/ 05 апреля 2019

Я работаю над 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

Может кто-нибудь объяснить мне, что я делаю неправильно, и в идеале дать мне идеи о том, как решить эту проблему?

Заранее спасибо

...