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

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

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

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

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

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

Ответ 1

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

  java -Dsbt.ivy.home =/tmp/.ivy2/...
Код>

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

Ответ 2

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

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

java -Dsbt.ivy.home=/tmp/.ivy2/ -Divy.home=/tmp/.ivy2/ -jar `dirname $0`/sbt-launch.jar "[email protected]"

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

Ответ 3

Вы должны использовать sbt-extras, если вы этого не сделаете.

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

sbt -ivy /path/to/.ivy2

Ответ 4

Расположение файлов плюща

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

build.xml
ivy.xml
ivysettings.xml

Решения и извлечения плющ должны найти оба файла.

Например:

<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

Ответ 5

Вы можете получить домашний каталог с помощью 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)

Ответ 6

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

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

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

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

Ответ 7

sbt -ivy /tmp/.ivy2 compile

Ссылка: man sbt

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