Подтвердить что ты не робот

Работа в автономном режиме с зависимостями SBT и SNAPSHOT

Я никогда не мог работать в автономном режиме с SBT по любому из моих проектов. Теперь я нахожусь в середине хода, и мой гардероб-сервер, на котором размещается nexus, отключен.

Так что скажите:

sbt "set offline := true" run

Я получаю среди других недостающих депок:

[error] unresolved dependency: se.hedefalk#lift-utils_3.0_2.10;0.2-SNAPSHOT: not found

для зависимости, объявленной как:

"se.hedefalk"       %% ("lift-utils_"+liftEdition) % ("0.2-SNAPSHOT"),

Но у меня есть зависимость в моем кэше плюща:

$ ll ~/.ivy2/cache/se.hedefalk/lift-utils_3.0_2.10/
total 32
drwxr-xr-x  8 viktor  staff   272B Mar 14 11:36 ./
drwxr-xr-x  5 viktor  staff   170B Mar  8 10:38 ../
drwxr-xr-x  3 viktor  staff   102B Mar 14 11:36 docs/
-rw-r--r--  1 viktor  staff   4.5K Mar  4 15:54 ivy-0.2-SNAPSHOT.xml
-rw-r--r--  1 viktor  staff   4.0K Mar  4 15:54 ivy-0.2-SNAPSHOT.xml.original
-rw-r--r--  1 viktor  staff   1.8K Mar 14 11:36 ivydata-0.2-SNAPSHOT.properties
drwxr-xr-x  3 viktor  staff   102B Mar  8 10:38 jars/
drwxr-xr-x  3 viktor  staff   102B Mar 14 11:36 srcs/

Разве этого недостаточно? Весь этот набор "offline: = true" никогда не имел для меня никакого значения. Кажется, что разрешение зависимостей происходит раньше.

Мне действительно нужно заставить это работать сейчас. У меня были проблемы с этим в течение многих лет, но теперь я в ситуации, когда я просто не могу работать вообще.

Здесь: http://www.scala-sbt.org/0.13.5/docs/Detailed-Topics/Dependency-Management-Flow.html

Я прочитал

Когда отключено: = true, удаленные SNAPSHOT не будут обновляться или даже явно запрошенное обновление. Это должно эффективно поддерживать работу без подключения к удаленному Хранилища. Воспроизводимые примеры, демонстрирующие оценили. Очевидно, обновление должно быть успешно запущено до в автономном режиме.

Я, вероятно, не понимаю этого правильно, но он говорит, что у меня не должно быть проблем, которые у меня есть?

У меня та же проблема:

> sbt "skip in update := true" run

Использование sbt 0.13.5

Edit:

После повторной онлайн-репо, разрешив все депики, а затем просто установив мой Wi-Fi в автономном режиме, я могу выйти из sbt и запустить его. Однако просто запускайте, перезагрузите, очистите, компилируйте, и я снова f *** снова. И если я уйду, я даже не смогу начать sbt вообще. Разрешение зависимостей для проекта происходит, прежде чем я смогу, например, попытаться проанализировать граф зависимостей с деревом зависимостей или аналогичным. Это очень раздражает, даже если не в сети, если вы говорите, пытаясь понять, откуда исходит переходная транзитивная зависимость.

4b9b3361

Ответ 1

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

Например, ваши ~/.sbt/repositories могут выглядеть следующим образом:

[repositories]
  local
  maven-central
  cache: file://${user.home}/.ivy2/cache, [organisation]/[module]/ivy-[revision].xml, [organisation]/[module]/[type]s/[module]-[revision].[type]

Примечание. Я должен был явно установить шаблоны плюща и артефакта. Добавьте локальный кеш ниже любых других репозиториев, чтобы они сначала попытались.

Ответ 2

Я не могу использовать его в одном слое.

Но если я начинаю sbt, а затем в sbt я использую set offline := true, он работает хорошо.

Ответ 3

Здесь есть страница wiki: https://github.com/sbt/sbt/wiki/User-Stories:--Offline-mode-and-Dependency-Locking, отредактированный в мае, в котором говорится, что представление SBT в автономном режиме работает неправильно. Это может быть одной из причин, по которым ваша сборка продолжает пытаться разрешать зависимости от удаленных репозиториев, даже если установлен параметр offline.

Ответ 4

Начиная с sbt 0.13.7, вы можете работать в автономном режиме, когда используете кэш зависимостей

Чтобы сделать это коротко:

  • добавить updateOptions := updateOptions.value.withCachedResolution(true) в настройках вашего проекта (и во всех настройках подпроектов)
  • запустите sbt clean compile после онлайн. Он работает как раньше, проверяя все разрешение. Но также создайте и сохраните разрешенный граф зависимостей локально (в ~/.sbt/0.13/dependency).

Затем, если вы не измените свои зависимости, sbt всегда будет использовать кэшированную зависимость и не будет нуждаться в сети (я просто попытался)