Как настроить Leiningen для использования корпоративного репозитория?

Мы размещаем корпоративный репозиторий, который выступает в качестве прокси-сервера для известных репозиториев (например, Maven Central и Clojars). Я хочу, чтобы Leiningen попал в корпоративный репозиторий в первую очередь. Только когда корпоративный репозиторий не сможет предоставить артефакт, Leiningen должен спросить стандартные репозитории. Это должно быть поведение по умолчанию для всех моих проектов. Какую конфигурацию мне нужно сделать?

Я добавил корпоративный репозиторий в качестве зеркала в ~/.lein/profiles.clj:

{:user {:mirrors {"our-repo" {:name "our-repo"
                              :url "http://our-repo/all/"}}}}

К сожалению, этот параметр не влияет. Leiningen загружает артефакты из Maven Central:

PS> lein repl
Retrieving org/clojure/clojure/1.5.1/clojure-1.5.1.pom from central
...

Обновление

xsc предлагает перезаписать репозиторий Maven Central с помощью определения зеркала, которое указывает на корпоративный репозиторий. Оно работает. Теперь вместо перехода на внешний репозиторий Maven Leiningen извлекает артефакты из корпоративного репозитория.

S/He также предлагает указать дополнительное определение репозитория для установки резервного механизма. К сожалению, это не так хорошо, потому что Leiningen жалуется на эту настройку:

:repositories detected in user-level profiles! [:user]
See https://github.com/technomancy/leiningen/wiki/Repeatability

Это предупреждение очень раздражает. По этой причине я воздержался от этой установки. Есть ли другой способ установить резервный механизм?

Ответ 1

Насколько я могу видеть в примере Leiningen project.clj, вы должны использовать имя репозитория для зеркального отображения в качестве ключа в :mirrors. Итак, попробуйте следующее:

{:mirrors {"central" { ... }}}

Это, скорее всего, заменит репозиторий полностью, поэтому вы можете снова добавить оригинал:

{:mirrors      {"central" {:url "..." }}
 :repositories {"maven"   {:url "http://repo1.maven.org/maven2/"}}}

Ответ 2

Вот что работает для меня:

{:user {:mirrors {#".+" {:url "http://nexus.example.com:8081/nexus/content/groups/public"}}
        :repositories [["snapshots" {:id "NudaySnapshots"
                                     :url "http://nexus.example.com:8081/nexus/content/repositories/snapshots"}]
                       ["releases" {:id "NudayReleases"
                                    :url "http://nexus.example.com:8081/nexus/content/repositories/releases"
                                    :sign-releases false}]]}
 :auth {:repository-auth {#"nexus.example.com" {:username "deployment"
                                               :password "foo bar baz"}}}}

Это обрабатывает как разрешение зависимостей через мое зеркало Nexus, так и публикацию артефактов с помощью lein deploy.

Я получаю раздражающее предупреждение "Повторяемость", но я работаю над тем, чтобы избавиться от этого.