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