# Среда сборки проекта Для сборки проекта требуется доступ к ряду репозиториев с дополнительными зависимостями (к примеру, общие библиотеки java). Есть несколько вариантов организации работы с репозиториями. ### 1. Сборка с использованием публичных репозиториев - Все зависимости скачиваются из публичных репозиториев (например, Maven Central), расположенных непосредственно в интернете. ### 2. Сборка с использованием внутреннего прокси-репозитория - Используется промежуточный репозиторий-прокси. - Все зависимости запрашиваются у прокси-репозитория. - Если зависимость не найдена — прокси делает запрос к внешним репозиториям, скачивает нужное и кэширует у себя. Подробнее можно посмотреть в официальной [документации sbt](https://www.scala-sbt.org/1.x/docs/Proxy-Repositories.html) ### 3. Сборка в закрытой среде (изолированной) - Среда полностью изолирована от интернета. - Используется локальный репозиторий. - Все зависимости предварительно вручную загружены во внутренний репозиторий. #### Настройка сборки в закрытой среде. ##### Шаг 1. Создать файл с конфигурацией репозитория Создайте файл `~/.sbt/repositories`: ``` shell 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](https://www.scala-sbt.org/1.x/docs/Proxy-Repositories.html#sbt+Configuration) ---------- ``` {note} Файл `.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. Добавить файл с учётными данными (если нужен доступ по логину/паролю) Создайте файл: ``` shell 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. **Выполните команду:** ```shell 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-сертификат 3. **Проверка добавления:** ```shell keytool -list -keystore $JAVA_HOME/lib/security/cacerts -storepass changeit | grep company-ca ``` ----------