Управление зависимостью Java от частных репозиториев GitHub?

#java #maven #github #gradle

#java #maven #github #gradle

Вопрос:

Моя команда использует GitHub.com организация, чтобы хранить весь наш исходный код в частных репозиториях. (Ранее наш старый рабочий процесс отправлял ссылки на Dropbox по электронной почте). Большую часть времени каждое репозиторий представляет собой отдельный проект, не зависящий ни от одного другого (единственные зависимости — от сторонних библиотек с открытым исходным кодом). Или, если есть какая-то зависимость, то файлы .java только что были скопированы и вставлены в другой проект.

Недавно я разделил часть своего кода на модули многократного использования, но я не знаю никакого способа управления зависимостью, когда я использую библиотеки, которые я создаю в другом проекте.

Я знаю, что с помощью Gradle вы можете добавить репозиторий git следующим образом:

 gitRepository('https://github.com/user/project.git') {
    producesModule('user:project')
}
 

но я не знаю, есть ли способ заставить его работать с частными репозиториями, и я не знаю, есть ли способ указать версии.

В настоящее время мое решение состоит в том, чтобы просто создать библиотеку JAR и отслеживать двоичную версию с помощью тегов GitHub release, а когда мне нужно использовать библиотеку в другом проекте, я загружаю нужную версию JAR (обычно самую последнюю) и добавляю ее в локальную папку / lib/ в другой проект и импортируйте JAR в путь к модулю как локальный JAR. Конечно, мне нужно снова пройти весь процесс вручную, если я хочу внести изменения в библиотеку.

Я также слышал, что вы можете настроить частные серверы Gradle или Maven, и некоторые компании делают это, но я предполагаю, что это означало бы переход от GitHub.com ?

Есть ли какой-нибудь способ заставить эту работу (либо Gradle, либо Maven, это не имеет значения) управлять зависимостями между частными репозиториями GitHub?

Может кто-нибудь сказать мне, каков наиболее разумный способ (или способы) решить эту проблему?

Спасибо.

Ответ №1:

Что вам нужно, так это очень типичная настройка на основе maven / gradle, где

  • каждый из ваших проектов будет создавать артефакт с координатами группы форм: имя: версия
  • ваши проекты не обязательно должны быть явно осведомлены друг о друге. Они зависят от артефактов, созданных другими проектами. Это называется двоичной зависимостью
  • чтобы проект мог найти двоичную зависимость, вам понадобится центральный реестр, в который вы можете публиковать все свои артефакты. У GitHub есть продукт под названием GitHub Package именно для этой цели.
  • Если вы еще не хотите использовать пакет GitHub или ваши настройки (количество проектов, размер каждого проекта, размер вашей команды) достаточно малы, вы можете локально проверить все проекты и включить их в составную сборку gradle, чтобы бинарные зависимости были заменены локальными зависимостями проекта. Хорошая особенность составной сборки заключается в том, что, когда вы решаете инвестировать в реестр пакетов, ваш build.gradle вообще не требует изменений.

Кстати, то, где вы запускаете свой реестр частных пакетов, на самом деле не имеет значения. Вы можете использовать пакет GitHub или некоторые другие размещенные сервисы или даже запустить, например, jfrog artifactory на своем собственном сервере. Это совершенно не связано с тем, где вы размещаете свой исходный код, поэтому вам ни в коем случае не нужно переходить с GitHub.