Не удалось найти компонент в classpath

Я пытаюсь использовать различные примеры для начала работы, и я могу получить базовый пример приветствия, работающий с базовым HTML на маршруте как таковой

(ns hello-world
  (:use compojure.core ring.adapter.jetty)
  (:require [compojure.route :as route]))

(defroutes example
  (GET "/" [] "<h1>Hello World Wide Web!</h1>"))

(run-jetty example {:port 8080})

Но когда я пытаюсь использовать html-помощники так

(ns hello-world
  (:use compojure ring.adapter.jetty)
  (:require [compojure.route :as route]))

(defroutes example
  (GET "/" []
    (html [:h1 "Hello World"])))

(run-jetty example {:port 8080})

Затем я получаю следующую ошибку

[null] Исключение в потоке "main" java.io.FileNotFoundException: Не удалось найти compojure__init.class или compojure.clj в пути к классам: (core.clj: 1)

Ответ 1

Как упоминается в комментарии W55tKQbuRu28Q4xv, во втором примере вы используете (:use compojure ...). Вы должны переключиться на (:use compojure.core ...), а затем, возможно, наложить дополнительные зависимости для других используемых вами функций (например, hiccup (< - - это ссылка на репозиторий GitHub), который теперь является отдельным проектом для DSL для построения HTML).

Я предполагаю, что вы пытаетесь следовать некоторым учебникам, написанным для Compojure 0.3 при использовании Compojure 0.4. Последнее не включает в себя пространство имен compojure вообще и значительно сократилось, причем основная обработка HTTP делегирована ring и различные другие функциональные возможности, выделенные для отдельных проектов (например, вышеупомянутые hiccup).

К счастью, имеются хорошие ресурсы для перехода 0,3 → 0,4, например. эта запись в блоге от Brenton Ashworth. Если вы не можете найти что-то, что было удалено из Compojure, скорее всего, вы сможете узнать, где его найти сейчас. См. Также это последующее обсуждение в группе Compojure Google для исправлений и дополнительных сведений.

Ответ 2

Я играл с Compojure "Hello World" и имел эту проблему (как и многие другие, которые путаются в моем мозгу). Еще одно осложнение заключается в том, что документация Compojure в Интернете уже устарела. Итог, это шаг, который вы хотите выполнить:

  • У вас есть обновленная версия Leiningen. Обязательно выполняйте инструкции по установке на сайте github. (Не проходите через macports, их Leiningen устарел.)

  • Следуйте инструкциям Compojure здесь.

Обратите внимание, что имя файла неверно. Это должно быть src/hello_www/core.clj NOT src/hello-www/core.clj.