(SBT) Как отключить распознаватель по умолчанию и использовать только внутренний преобразователь компании?

Мы хотим использовать внутренний репозиторий ivy/maven (artifactory) компании, чтобы улучшить скорость решения и загружать файлы jar, а также мы хотим использовать его для обмена двоичными файлами jar между различными командами в нашей организации.

Я знаю, что мы можем заставить SBT пройти через прокси, установив ~/.repositories с помощью

[repositories]
  local
  my-ivy-proxy-releases: http://repo.alpinenow.com/artifactory/repo/, [organization]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)[revision]/[type]s/[artifact](-[classifier]).[ext]
  my-maven-proxy-releases: http://repo.alpinenow.com/artifactory/repo/

а затем запустите SBT с помощью -Dsbt.override.build.repos=true. Этот метод работает для меня.

Однако, это довольно громоздко просить всех разработчиков настроить этот путь. Нам интересно, можем ли мы полностью переопределить дескрипторы по умолчанию в Build.scala и plugin.sbt без дополнительной настройки.

До сих пор я пробовал следующие пути без успеха.

1) Как в Build.scala, так и в plugin.sbt, я добавил

resolvers := "Local Repo" at "http://repo.alpinenow.com/artifactory/repo/",

externalResolvers := Seq(Resolver.url("Local Repo", url("http://repo.alpinenow.com/artifactory/repo"))(Resolver.ivyStylePatterns)),

но он по-прежнему загружает банки из typesafe и maven1.

2) Затем я решил поместить файл репозитория в папку проекта и попытался добавить опцию java непосредственно внутри plugin.sbt и Build.scala с

System.setProperty("-Dsbt.override.build.repos", "true"),

System.setProperty("-Dsbt.repository.config", "project/repositories"),

но он по-прежнему не работает. Мне любопытно, когда SBT получает java-параметры для преобразователей, поскольку, очевидно, это перед plugin.sbt и Build.scala.

Любая идея?

Спасибо.

DB Tsai

Ответ 1

Если вы отходите от sbt-extras shell script в качестве замены пусковой установки по умолчанию script, я думаю, вы могли бы легко измените это с настройкой ~/.repositories и добавьте -Dsbt.override.build.repos=true. Тогда все, что вам нужно сделать, это обеспечить, чтобы ваши разработчики использовали этот script.

Ответ 2

Я всегда добавляю SBT-сборку как часть моего репо в SVN/ GIT, рядом с кодом. Тогда у меня таких проблем нет.

Это стоит около 1 Мб, поэтому довольно дешево и решает много проблем. Все разработчики используют идентичный инструмент сборки. Даже если я попытаюсь создать Continues Integration или более продвинутый процесс Continues Delivery, все конфигурации SBT будут уже хорошо настроены в моем SCM. Я получу один источник истины:)

Ответ 3

Согласно документации мы должны использовать externalResolvers:
https://www.scala-sbt.org/release/docs/Library-Dependencies.html#Overriding+default+resolvers

externalResolvers := Seq(
  "Maven Central (proxy)" at "http://repo-1/nexus/content/repositories/central/",
  "Typesafe (proxy)" at "http://repo-1/nexus/content/repositories/typesafe-releases/",
  // some more internal Nexus repositories
)

Вы должны будете сделать это также в папке вашего project для плагинов, как в project/resolvers.sbt.

И если вы также хотите, чтобы SBT самостоятельно разрешал из определенного репо, вам нужно сделать это, как описано здесь: https://www.scala-sbt.org/1.x/docs/Proxy-Repositories.html

Ответ 4

Уровень проекта

Согласно документации мы должны использовать externalResolvers:
https://www.scala-sbt.org/release/docs/Library-Dependencies.html#Overriding+default+resolvers

externalResolvers := Seq(
  "Local Repo" at "http://repo.alpinenow.com/artifactory/repo/",
  // some more internal Nexus repositories
)

Уровень плагинов

Вы должны будете сделать это также в папке вашего project для плагинов, как в project/resolvers.sbt.

Глобальный уровень SBT

И если вы также хотите, чтобы SBT самостоятельно разрешал из определенного репо, вам нужно сделать это, как описано здесь: https://www.scala-sbt.org/1.x/docs/Proxy-Repositories.html