(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