Как настроить каталог кэша плюща для каждого пользователя или для всей системы? - PullRequest
32 голосов
/ 29 июня 2010

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

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

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

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

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

Ответы [ 7 ]

42 голосов
/ 05 ноября 2011

Свойство 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/. Конечно, вы можете поместить их и в отдельные каталоги.

30 голосов
/ 01 августа 2010

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

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

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

8 голосов
/ 09 декабря 2013

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

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

sbt -ivy /path/to/.ivy2
3 голосов
/ 04 марта 2014

Вы можете получить свой домашний каталог, используя 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)
3 голосов
/ 01 июля 2010

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

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

build.xml
ivy.xml
ivysettings.xml

Задачи ivy resol и retrieve должны найти оба файла.

Например:

<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
2 голосов
/ 21 июля 2017
sbt -ivy /tmp/.ivy2 compile

Ссылка: man sbt

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

2 голосов
/ 08 ноября 2010

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

В основном, чтобы заставить его работать в масштабе всей системы, вам потребуетсяto:

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

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

...