Работа в автономном режиме с зависимостями 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 вообще. Разрешение зависимостей для проекта происходит, прежде чем я смогу, например, попытаться проанализировать граф зависимостей с деревом зависимостей или аналогичным. Это очень раздражает, даже если не в сети, если вы говорите, пытаясь понять, откуда исходит переходная транзитивная зависимость.
Ответы
Ответ 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 всегда будет использовать кэшированную зависимость и не будет нуждаться в сети (я просто попытался)