0

我正在使用基座指南中的初学者指南,但是当尝试使用命名空间(需要'test)时,我收到以下错误消息:“用户/eval2012 (REPL:1) 处的执行错误 (FileNotFoundException)。无法在类路径上找到 test__init.class、test.clj 或 test.cljc。”</p>

尝试时会发生同样的事情(需要'你好)

我正在使用 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”})

有任何想法吗?

测试/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"]}
4

1 回答 1

2

replclj不同于. lein repl要使用lein repl,您需要一个 project.clj 文件。

我使用建议的成功完成了Pedestal 的初学者指南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。Leiningen 将依赖项放在 project.clj 中
  • clj 有:paths ["src"]。Leiningen 有:main:target-path在 project.clj

所以要从 切换cljlein 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 与准系统 clj 工具不同。它指向不同的启动文件(?),并以不同于指南推荐的准系统 clj 项目的方式引入依赖项。

从您的问题中,我没有看到提到 project.clj,所以也许这就是您需要的。

于 2021-03-19T22:04:06.633 回答