2016-09-15 7 views
1

У меня есть проект SBT, который зависит от двух зависимостей моментальных снимков. Каждый раз, когда я его создаю, он отправляется в удаленный репозиторий для получения зависимостей. Это верно, даже если я установил offline := true.Почему sbt продолжает загружать мои зависимости от моментального снимка?

Когда я смотрю, как он пытается разрешить локальные зависимости, сборщик говорит, что он ищет «локальный», т. Е. ~/.ivy2/local/... - который является несуществующим каталогом.

Банки находятся в ~/.ivy2/cache/..., и именно здесь SBT загружает их, когда он вытягивает зависимости с удаленного сервера.

Я искал файлы .sbt и .scala для сборки. Строка «local» не отображается в них в репозитории или кеше.

SBT находится в версии 0.13.11 здание против scala 2.11.8.

Почему SBT это делает, и как я могу получить его, чтобы увидеть кешированные банки?

+0

Местный каталог ~/.ivy2/local - это локальный репозиторий Ivy по умолчанию, который можно публиковать с использованием publish-local. (См. Http://www.scala-sbt.org/0.12.4/docs/Detailed-Topics/Publishing.html.) Таким образом, проблема в том, что SBT вообще не смотрит на локальный кеш. – psfblair

+0

Подробнее об этом здесь: http://stackoverflow.com/questions/24395307/working-offline-with-sbt-and-snapshot-dependencies – psfblair

ответ

0

Если вы хотите, чтобы предотвратить SBT от попыток загрузить из официальных репозиториев вы можете просто создать файл project/offline-repositories:

[repositories] 
    mirror-central: file:////nexus/central 
    mirror-maven-central-org: file:////nexus/maven-central-org 
    ... 

(/nexus/central и /nexus/maven-central-org должен содержать (частично) зеркало, что вам нужно в автономном режиме)

Затем вызовите sbt с sbt.repository.config собственности сконфигурированной:

-Dsbt.override.build.repos=true \ 
-Dsbt.repository.config=./project/offline-repositories 

Для справки:

EDIT

Если вы хотите использовать ~/.m2 кэш:

[repositories] 
    mirror-central: file:////home/XXXXX/.m2/repository 
    mirror-maven-central-org: file:////home/XXXXX/.m2/repository 
    ... 
+0

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

+0

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

0

Это, по-видимому, связано с тем, что в моем кэше Ivy у меня был файл с именем ~/.ivy2/cache/com.xxx/xxx-utils/ivy-2.3.2-SNAPSHOT.xml.original, который сборщик пытался и не выполнял для синтаксического анализа. Я не знаю, откуда взялся этот файл; По-видимому, он был помещен туда вручную много лет назад.

+0

Я, кажется, ошибся об этом. Я создал локальный репозиторий Ivy, и сборка прошла. Затем я попытался удалить локальный репозиторий Ivy под ~ /.ivy2/local и моя сборка работали, но потом я попытался создать другой проект, используя тот же баннер моментальных снимков, и сборка завершилась неудачно. Когда я вернул локальный репозиторий Ivy, вторая версия прошла. – psfblair