2015-07-09 3 views
1

Я докционирую свою игру! Framework, и в настоящее время моя сборка занимает более 15 минут. Большая часть процесса, это фактически загрузка зависимостей, потому что у моего разработчика еще нет понятия кэшей. Я подумал, было бы неплохо скопировать все зависимости, которые нужны моему проекту, в локальную папку, чтобы она не загружала все снова и снова. Однако проблема в том, что я не знаю, как это сделать? Я знаю, что у SBT есть функция, которая позволяет указать локальное репо, но я не знаю о функциональности, которая позволяет мне копировать все в определенную папку.Скопируйте все зависимости SBT к локальной папке

ответ

3

Обновлено (2015-07-13):

ОК, так что вы хотите, сохраняя все зависимости в папке, которую вы хотите, вы можете попробовать это при запуске SBT,

sbt -Dsbt.ivy.home=/your/local/path/.ivy 

Затем он сохранит все файлы зависимостей или любые файлы, загруженные для создания вашего приложения, в /your/local/path/.ivy/cache.

Если вы хотите, чтобы держать их в своем проекте,

sbt -Dsbt.ivy.home=/some/path/to/your-project/.ivy 

Затем файлы будут сохранены в папке /some/path/to/your-project/.ivy/cache.

Кстати, докер не поддерживает кеш? Хммм, почему бы вам не попробовать какой-нибудь хороший сервис CI, например Semaphore CI, и позволить ему развернуть приложение до Docker? (У меня нет ни личного, ни другого подключения к Семафору. Это просто сервис, который я использую, и я попробовал около пяти различных инструментов CI и, как этот, самый).

Обновлено (2015-07-12): О, извините, ваш вопрос заключается не в использовании локального репо, а в копировании всего на него.

Возможно, это не совсем то, что вы просили, но, возможно, можете решить вашу проблему.

updateOptions := updateOptions.value.withCachedResolution(true) 

Примечание: Это экспериментальная функция.

Детали: sbt doc - Cached-Resolution

======================================= ========

вы можете указать репозиторий

resolvers += name at location 

Как

resolvers += "Sonatype OSS Snapshots" at "https://oss.sonatype.org/content/repositories/snapshots" 

Так что для местного Maven репо, вы можете просто сделать

resolvers += Resolver.mavenLocal 

Однако, в моем случае, когда я это сделал, он попытался получить доступ к PROJECT_HOME/{user.home}/.m2/repository, что является неправильным.

Я хотел был $HOME/.m2/repository, который является местоположением локального хранилища maven. Поэтому я помещаю следующую строку в build.sbt вместо Resolver.mavenLocal, и, похоже, она работает.

resolvers += "mavenLocal" at s"${sys.props("user.home")}/.m2/repository" 

Детали: sbt doc - Library-Dependencies

+0

Я не видел никаких функций, которые позволяют мне полностью загрузить все зависимости. Это то, что мне нужно. Еще спасибо за ответ. – Martijn

+0

@MartijnR Ну, я делаю это в build.sbt 'resolvers + =" mavenLocal "at s" $ {sys.props ("user.home")} /. M2/repository ", и он, похоже, не загружает зависимостей libs снова, когда он находит их в 'mavenLocal'. –

+0

Да, проблема есть. Я использую докер, что означает, что кеш не сохраняется. И было бы глупо копировать весь мой кеш maven, потому что он содержит много несвязанных вещей. :( – Martijn

Смежные вопросы