Среда сборки проекта#

Для сборки проекта требуется доступ к ряду репозиториев с дополнительными зависимостями (к примеру, общие библиотеки java). Есть несколько вариантов организации работы с репозиториями.

1. Сборка с использованием публичных репозиториев#

  • Все зависимости скачиваются из публичных репозиториев (например, Maven Central), расположенных непосредственно в интернете.

2. Сборка с использованием внутреннего прокси-репозитория#

  • Используется промежуточный репозиторий-прокси.

  • Все зависимости запрашиваются у прокси-репозитория.

  • Если зависимость не найдена — прокси делает запрос к внешним репозиториям, скачивает нужное и кэширует у себя.

Подробнее можно посмотреть в официальной документации sbt

3. Сборка в закрытой среде (изолированной)#

  • Среда полностью изолирована от интернета.

  • Используется локальный репозиторий.

  • Все зависимости предварительно вручную загружены во внутренний репозиторий.

Настройка сборки в закрытой среде.#

Шаг 1. Создать файл с конфигурацией репозитория#

Создайте файл ~/.sbt/repositories:

mkdir  -p  ~/.sbt
nano  ~/.sbt/repositories

Содержимое файла:

[repositories]
local
maven-proxy: https://repo.global-system.ru/artifactory/common/, allowInsecureProtocol

repositories - секция, где указываются все доступные repositories для sbt. local - локальный репозиторий кэша. Используется для зависимостей, установленных вручную или собранных локально. maven-proxy: https://repo.global-system.ru/artifactory/common/, allowInsecureProtocol

  • maven-proxy — это имя репозитория (можно любое).

  • https://repo.global-system.ru/artifactory/common/ — URL репозитория.

  • allowInsecureProtocol — флаг, позволяющий использовать небезопасный протокол HTTP вместо HTTPS (или с невалидным SSL-сертификатом). Начиная с версий 1.4+ sbt запрещает использовать HTTP. Этот флаг нужен если:

    • используется локальный репозиторий по HTTP, без SSL;

    • используется самоподписанный **SSL-сертификат **, и sbt считает его небезопасным.


Подробнее можно посмотреть в официальной документации sbt


Примечание

Файл `.sbt/repositories` - это конфигурация самого sbt-ланчера (загрузчика). Он нужен sbt, чтобы понимать, откуда скачивать зависимости (библиотеки, плагины и т.д.), до того как проект начнёт собираться.

Для сборки самого приложения необходимые файлы берутся из репозиториев указанных в файле - `[project_name]/project/repositories/default.yaml`:

repositories:
- name: maven-common url: "https://repo.global-system.ru/artifactory/common"
- name: global-general url: "https://repo.global-system.ru/artifactory/general"
- name: app-global url: "https://repo.global-system.ru/artifactory/build-kit" isBase: true isLoginRequired: true

Можно включить изоляцию репозиториев При добавлении опции -Dsbt.override.build.repos=true в файле проекта application/.sbtopts sbt будет обращаться только к репозиториям, указанным в .sbt/repositories


Шаг 2. Добавить файл с учётными данными (если нужен доступ по логину/паролю)#

Создайте файл:

mkdir  -p  ~/.ivy2
nano  ~/.ivy2/.credentials

Содержимое:

realm=Artifactory Realm
host=repo.global-system.ru
user=build-user
password=very-secret-password

Добавьте в систему переменную окружения

export SBT_CREDENTIALS="$HOME/.ivy2/.credentials" с корректным путем до файла .credentials


Шаг 3. Добавление сертификатов. В большинстве случаев в закрытой среде потребуется настроить Java-сертификаты#

  1. Получите корневой сертификат

  2. Выполните команду:

sudo keytool -import -trustcacerts \
-keystore $JAVA_HOME/lib/security/cacerts \
-storepass changeit \
-alias company-ca \
-file /путь/к/company-ca.crt
  • $JAVA_HOME — путь к установленной JDK (например, /usr/lib/jvm/bellsoft-java21-amd64)

  • -alias — уникальное имя сертификата в хранилище (например, company-ca)

  • -storepass changeit — пароль по умолчанию для cacerts (если не меняли)

  • -trustcacerts — указывает, что вы добавляете доверенный CA-сертификат

  1. Проверка добавления:

keytool -list -keystore $JAVA_HOME/lib/security/cacerts -storepass changeit | grep company-ca