#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: дерево показало, где была старая зависимость