SBT не может найти локальные зависимости в контейнере docker - PullRequest
0 голосов
/ 04 марта 2020

Я работаю над проектом Scala 2.12. В настоящее время я использую SBT 1.3.4, чтобы построить свой проект в fre sh docker container. Я использую привязку монтирования (тома) для доступа к моему исходному коду из контейнера. В проекте есть 2 модуля, которые создаются постепенно, вызывая их из проекта root build.sbt (таким образом, всего 3 build.sbt файлов).

Я хотел бы сохранить локальную копию jar файлы и source codes зависимостей проекта (все с открытым исходным кодом) и используйте локальный jar files для сборки проекта вместо загрузки их из inte rnet. Веб-сайт sbt упоминает, что если я сохраню копию файлов jar зависимостей в папке lib в каталоге root моего проекта, build.sbt должен попытаться использовать локальные библиотеки (для компиляции и упаковки проекта) без изменений необходимо в build.sbt файле. Однако моя сборка завершается неудачно, если я отключен от inte rnet. Я даже скопировал все каталоги / файлы в ~/.ivy2/cache в /root/.ivy2/local и использовал "set offline := true" в sbt. Никто из них не помешал sbt пытаться загрузить файлы. Ниже приведен пример:

[error] Error downloading org.scala-lang:scala-library:2.12.8
 [error]   Not found
 [error]   Not found
 [error]   not found: /root/.ivy2/local/org.scala-lang/scala-library/2.12.8/ivys/ivy.xml
 [error]   download error: Caught java.net.UnknownHostException: repo1.maven.org (repo1.maven.org) while downloading https://repo1.maven.org/maven2/org/scala-lang/scala-library/2.12.8/scala-library-2.12.8.pom

Я посмотрел /root/.ivy2/local/org.scala-lang/scala-library/2.12.8/ и обнаружил, что файлы ivy xml прямо перечислены там, и там нет папки ivys/.

Я ценю любую помощь. Если есть лучший способ использовать автономные библиотеки для сборки и упаковки проектов sbt в docker контейнерах, пожалуйста, дайте мне знать.

Спасибо!

1 Ответ

0 голосов
/ 05 марта 2020

В SBT есть два вида зависимостей: управляемые и неуправляемые.

Управляемые - это те, в которых вы вводите только некоторые координаты (libraryDependencies += "group" %% "artefact" % "version), а SBT управляет ими самостоятельно.

Неуправляемые - это просто jar-файлы, которые вы можете поместить в папку lib. Они просто доступны для сборки при компиляции и во время выполнения.

SBT использует ivy2 или coursier для кэширования загруженных jar-файлов из коробки. Вы можете настроить каталог, в котором хранится кеш. Мой совет - при сборке внутри Docker поменять этот каталог на какой-нибудь подкаталог вашего проекта. Таким образом, файлы будут доступны для последующих Docker запусков.

COURSIER_CACHE="$(pwd)/cache" sbt build

Я бы хотел сохранить копию файлов зависимостей jar (& source) в моем git repo

Кстати, это не очень хорошая идея в целом.

...