Что означают ключи Clojure deps.edn: deps? - PullRequest
0 голосов
/ 19 ноября 2018

Пытаясь использовать Clojure Deps и CLI, я с удивлением обнаружил, что для работы clojure.data.json сработало следующее.

Зависимость Maven:

{:deps {org.clojure/data.json {:mvn/version "0.2.6"}}}

Зависимость Gitс тем же ключом:

{:deps {org.clojure/data.json {:git/url "https://github.com/clojure/data.json.git"
                               :sha "13e9d244678be7b235bb24a10310f9d147ea088d"}}}

Зависимость Git со случайным ключом:

{:deps {lol/this-works {:git/url "https://github.com/clojure/data.json.git"
                        :sha "13e9d244678be7b235bb24a10310f9d147ea088d"}}}

С зависимостями Maven и Clojars: ключи deps идентифицируют артефакт.Когда вместо этого используется git sha, имя не имеет значения.

  • Что означает Clojure deps.edn: ключи deps?
  • Как мне выбрать мои: ключи deps?

Ресурсы, которые я прочитал, но могут содержать то, что мне нужно:

1 Ответ

0 голосов
/ 20 ноября 2018

Казалось бы, это результат того, как "расширение" git обрабатывается в инструменте по сравнению с другими "расширениями", такими как maven. Весь соответствующий код для этого можно найти здесь . Я также поясню, что я не читал этот код подробно, и поэтому мои знания этого кода не глубокие.

Если вы посмотрите, например, как обрабатывается lib в расширении maven, кажется, что он на самом деле проверяет maven, чтобы увидеть, что артефакт существует по указанному имени, которое вы можете увидеть в нескольких местах. , но также включая в мультиметодное определение ext/canonicalize :mvn

В коде расширения git для lib задана другая обработка, которую вы можете увидеть в определении мультиметода ext/canonicalize :git

Я не хочу вдаваться в суть гипотезы, но я предполагаю, что если бы это было намеренное дизайнерское решение, это, вероятно, связано с тем, что адрес git-репо является SoT для такого рода зависимостей (даже если адрес / имя репо могут измениться… опасность!), Тогда как в Maven имена регистрируются первоклассными гражданами.

И чтобы попытаться более прямо ответить на два ваших вопроса ... Что означают клавиши :deps? Ответ прост: это зависит от того, что это за депо! При использовании git это может быть что угодно, а при использовании Maven, например, он должен ссылаться на известный пакет. Как мне выбрать ключи депо? Это может быть субъективным, однако я бы порекомендовал использовать любое хранилище с надежным неизменяемым хранилищем пакетов за ним, и только при необходимости использовать такое хранилище, как github. Это связано с тем, что зависимости github могут изменить свой адрес / имя или просто исчезнуть (удаленный репозиторий).

...