как получить значимые ошибки зависимостей в clojure?

#clojure #leiningen

#clojure #leiningen

Вопрос:

Если я добавлю следующее, требуется:

 (ns project.core
  (:require
     [compojure.route          :as route])
  (:gen-class))

(defn -main [amp; {:as args}]
  (println "hello"))
  

сделать

 lein run
  

Я получаю

 Syntax error macroexpanding clojure.core/ns at (ring/util/mime_type.clj:1:1).
((require [clojure.string :as str])) - failed: Extra input spec: :clojure.core.specs.alpha/ns-form
  

есть ли способ, которым я могу получить
«compojure.route не найден; не определен; или что-то еще», например, что-то значимое?
если я удалю его, он будет работать нормально. например, он говорит Привет

использование Leiningen 2.9.4 на Java 14.0.1 OpenJDK 64-разрядной серверной виртуальной машины

Ответ №1:

Проект, который вы используете, использует очень старые зависимости. Спецификация Clojure (введенная «recenlty») добавила проверки макросов / времени компиляции, и упомянутый там файл запускает его.

compojure.route на самом деле найдено, и затем требуется его транзитивный deps. И хотя требуется переход по цепочке ring.util.mime-type , а используемая вами версия не готова для текущих версий Clojure.

Лучше всего здесь обновить свой deps. Например, если вы читаете книгу или используете шаблон, это может случиться. Если вы lein-ancient установили, он может попытаться выполнить обновление для вас. В противном случае лучше всего начать с вашей project.clj и сравнить версии (например, проверить clojars).

Если проблема все еще сохраняется, посмотрите lein deps :tree и посмотрите, что происходит с транзитивными deps.

Комментарии:

1. Для справки: это было исправлено шесть лет назад: github.com/ring-clojure/ring/commit /…

2. Спасибо за объяснение lein deps: дерево показало, где была старая зависимость