пространство имен не загружено в пьедестал закрытия

Я использую руководство для начинающих в руководстве по пьедесталу, но при попытке использовать пространство имен (требуется проверка) я получаю следующее сообщение об ошибке: «Ошибка выполнения (FileNotFoundException) в user / eval2012 (REPL: 1). Не удалось найти test__init.class, test.clj или test.cljc в пути к классам ».

То же самое происходит при попытке (требуется привет)

Я использую lein repl.

У меня есть каталог с именем test, а в разделе src находится файл с именем test.clj

тест / SRC / test.clj:

(ns test
(:require [io.pedestal.http :as http]
[io.pedesteal.http.route :as route]))

тест / SRC / hello.clj:

(defn respond-hello [request]
{:status 200 :body “Herllo world”})

Любые идеи?

test / deps.edn:

:deps                                                
 {io.pedestal/pedestal.service {:mvn/version "0.5.7"}
  io.pedestal/pedestal.route   {:mvn/version "0.5.7"}
  io.pedestal/pedestal.jetty   {:mvn/version "0.5.7"}
  org.slf4j/slf4j-simple       {:mvn/version "1.7.28"}}
 :paths ["src"]}

person Jonas Fredriksson    schedule 19.03.2021    source источник
comment
Конечно, вам нужно будет показать нам свои структуры файлов / каталогов и ваш project.clj, но на первый взгляд: если это должны быть тесты, обычно нет src под test директорией - то же самое для hello, но это не хватает ns?   -  person cfrick    schedule 19.03.2021
comment
нет project.clj, я просто следую руководству по пьедесталу. структура файла показана выше, то есть: test / src / test.clj и test / src / hello.clj. название теста совершенно произвольно, оно не имеет ничего общего ни с каким тестом. Я добавил deps.edn выше   -  person Jonas Fredriksson    schedule 19.03.2021
comment
Тогда не стоит использовать lein repl? Он не найдет файлы, если вы настроите их для инструментов clojure cli. Итак, первый уровень test в вашей структуре каталогов - это имя вашего проекта, и вы фактически используете все эти инструменты внутри него? Для справки в будущем: не задавайте этого в вопросах - это сбивает с толку людей (таких как я) - просто предполагайте корень проекта.   -  person cfrick    schedule 19.03.2021


Ответы (1)


Ответ clj отличается от lein repl. Чтобы использовать lein repl, вам понадобится файл project.clj.

Я успешно прошел руководство для начинающих по пьедесталу, используя предложенный clj, но получил вашу ошибку при использовании lein repl :

user=> (require 'test)
Execution error (FileNotFoundException) at user/eval2006 (REPL:1).

user=> (require 'hello)
Execution error (FileNotFoundException) at user/eval2008 (REPL:1).
Could not locate hello__init.class, hello.clj or hello.cljc on classpath.

Я посмотрел на разницу между проектом clj и проектом Leiningen, и вот что я вижу:

  • clj использует deps.edn. Лейнинген помещает зависимости в project.clj
  • clj имеет :paths ["src"]. Leiningen имеет :main и :target-path в project.clj

Итак, чтобы переключиться с clj на lein repl, я добавил файл project.clj следующим образом:

(defproject pedestal "0.1.0-SNAPSHOT"
  :dependencies [[org.clojure/clojure "1.10.1"]
                 [io.pedestal/pedestal.service "0.5.7"]
                 [io.pedestal/pedestal.route "0.5.7"]
                 [io.pedestal/pedestal.jetty "0.5.7"]]
  :main ^:skip-aot test
  :target-path "target/%s")

который следует за моей структурой каталогов ...

.../pedestal/src/test.clj
.../pedestal/project.clj
.../...

Когда я запустил его снова, мне даже не понадобилось ни (require 'test), ни даже(test/start). (start) сделал свое дело, и страница загрузилась

Рабочая веб-страница

Leiningen отличается от barebones clj tool. Он указывает на запуск файлов (?) по-другому и извлекает зависимости иначе, чем проект barebones clj, что рекомендовано в руководстве.

Из вашего вопроса я не вижу упоминания о project.clj, так что, возможно, это то, что вам нужно.

person Aaron Bell    schedule 19.03.2021