Как настроить каталог кэша плюща для каждого пользователя или всей системы?
Я использую SBT в качестве инструмента для сборки проекта Scala.
Моя проблема в том, что я не могу настроить SBT для загрузки зависимостей в мой домашний каталог пользователя. Поэтому я ищу для каждого пользователя или даже лучше общесистемную настройку, чтобы сказать SBT поместить каталог кэша Ivy в другое место.
В maven есть файл settings.xml для каждого пользователя, который можно использовать для настройки локального репозитория.
Я прочитал вопрос Как переопределить расположение кэша плюща? и это ответы, но кажется, что он описывает только настройку параметров для каждого проекта.
Если альтернативы нет, я бы выбрал настройку для каждого проекта, но я не получил ответа на этот вопрос. Хотелось бы получить еще больше подробностей, например, где разместить файл ivysettings.xml. Я положил его в корневой каталог проекта, и он не работал.
7 ответов
Вы можете просто добавить переменную окружения в ваш скрипт запуска sbt:
java -Dsbt.ivy.home=/tmp/.ivy2/ ...
См. Управление библиотекой в официальной документации.
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 "$@"
С этими свойствами программа запуска загрузит зависимости вашего проекта и sbt в /tmp/.ivy2/
каталог. Конечно, вы можете поместить их в отдельные каталоги.
Вы должны использовать sbt-extras, если вы этого еще не сделали.
Тогда это просто флаг, который вы передаете:
sbt -ivy /path/to/.ivy2
Вы можете получить свой домашний каталог, используя 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)
Расположение файлов плюща
Обычно я помещаю файлы 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
sbt -ivy /tmp/.ivy2 compile
Ссылка: человек сб
Опции: -ivy path: путь к локальному репозиторию Ivy (по умолчанию: ~/.ivy2)
Для редактирования местоположения кэша во время самой загрузки SBT, см. Конфигурация Sbt Launcher в официальной документации.
По сути, чтобы заставить его работать в масштабе всей системы, вам необходимо:
- Поместите файл конфигурации с именем
sbt.boot.properties
где-то, где он доступен для всей системы (по умолчанию указан по ссылке выше). - Вызов лаунчера с дополнительным системным свойством
sbt.boot.properties
установить, чтобы указать на ваш файл конфигурации. - Установить
cache-directory
запись (в[ivy]
раздел) к местоположению вашего кэша плюща.
Эта конфигурация, по-видимому, не распространяется на обычное использование SBT, к сожалению.