Как настроить каталог кэша Ivy для каждого пользователя или всей системы?

Я использую SBT как мой инструмент сборки для создания проекта Scala.

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

с maven есть настройки для каждого пользователя.xml, который можно использовать для настройки локального репозитория.

Я прочитал вопрос как переопределить местоположение кэша Айви? и это ответы, но, похоже, он описывает только, как настроить параметр на основе каждого проекта.

Если нет альтернативы, я бы пошел на настройку для каждого проекта, но я не получил ответа от упомянутого вопроса на работу. Некоторые дополнительные детали были бы наиболее желательны, например, где поставить ivysettings.XML. Я поместил его в корневой каталог проекта, и он не работал.

7 ответов


вы можете просто добавить переменную среды в сценарий оболочки запуска sbt:

java -Dsbt.ivy.home=/tmp/.ivy2/ ...

посмотреть Управление Библиотеки в официальной документации.


на sbt.ivy.home собственность-это только половина решения. Он контролирует, где SBT launcher загружает сам sbt (и связанные зависимости, такие как компилятор и библиотека scala и т. д.) Как отметил Йоахим Хофер, это не влияет на то, где загружаются зависимости, объявленные вашим проектом.

изменить это месте, вы должны установить ivy.home собственность. Итак, чтобы увеличить первое решение Иоахима, вы должны установить обе системы свойства:

java -Dsbt.ivy.home=/tmp/.ivy2/ -Divy.home=/tmp/.ivy2/ -jar `dirname `/sbt-launch.jar "$@"

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


вы должны использовать sbt-дополнительно Если вы еще не делаете.

тогда это просто флаг, который вы передаете:

sbt -ivy /path/to/.ivy2

расположение файлов ivy

Я обычно ставлю Айви.в XML и ivysettings.в XML файлы вместе с файлом сборки следующим образом:

build.xml
ivy.xml
ivysettings.xml

задачи плющ resolve и извлечь должен найти оба файла.

например:

<target name="init" description="--> retrieve dependencies with ivy">
    <ivy:retrieve pattern="lib/[conf]/[artifact].[ext]"/>
</target>

странно, что это не работает для вас.

пользовательские настройки

вы можете эмулировать файл настроек maven через пару пути

1) включить директиву в рамках проекта ivysettings.в XML

<ivysettings>
    <include file="${user.home}/.ivy2/my-ivysettings.xml"/>
</ivysettings>

2) установить местоположение из сборки файл

<target name="init" description="--> retrieve dependencies with ivy">
    <ivy:settings file="${user.home}/.ivy2/my-ivysettings.xml" />
    <ivy:retrieve pattern="lib/[conf]/[artifact].[ext]"/>
</target>

3) я никогда не пробовал это, но я думаю, что вы можете переопределить местоположение по умолчанию, используя свойство ANT

ant -Divy.settings.file=$HOME/.ivy2/my-ivysettings.xml

вы можете получить свой домашний каталог с помощью Path.userHome.absolutePath, как показано ниже:

resolvers += Resolver.file("Local", file( Path.userHome.absolutePath + "/.ivy2/local"))(Resolver.ivyStylePatterns)

Я полагаю, что вы также можете получить переменные окружения, используя System.getenv и свяжите таким же образом, как показано ниже:

resolvers += Resolver.file("Local", file( System.getenv("IVY_HOME") + "/whatever/it/is"))(Resolver.ivyStylePatterns)

для редактирования местоположения кэша во время самой загрузки SBT см. Конфигурация Пусковой Установки Sbt в официальной документации.

в принципе, чтобы заставить его работать в масштабах всей системы, вам нужно:

  • поместите файл конфигурации с именем sbt.boot.properties где-то, где он доступен для всей системы (по умолчанию он указан по ссылке выше).
  • вызовите launcher с дополнительным системным свойством sbt.boot.properties задайте для вашей конфигурации файл.
  • установить cache-directory запись (в [ivy] раздел) к местоположению вашего кэша плюща.

эта конфигурация, похоже, не переносится на обычное использование SBT, хотя, к сожалению.


sbt -ivy /tmp/.ivy2 compile

ссылки: человек sbt

параметры: - путь плюща: путь к локальному репозиторию Плюща (по умолчанию:~/.ivy2)