You need to enable JavaScript to run this app. Clojure Pedestal 使用lein repl加载命名空间报类路径找不到错误
优惠活动
大模型
产品
解决方案
定价
更多

Clojure Pedestal 使用lein repl加载命名空间报类路径找不到错误

问题核心原因
  • 工具链与项目配置不匹配:使用lein repl(Leiningen工具)启动REPL,但项目仅配置了Clojure官方CLI使用的deps.edn文件,缺少Leiningen要求的project.clj配置。Leiningen启动时不会自动识别deps.edn的路径配置,不会将src目录加入类路径,因此无论src下存在多少文件,REPL都会提示找不到对应命名空间的类文件。
  • 命名空间与文件映射不合法:src/hello.clj未按照Clojure规范声明文件对应的命名空间,仅写了函数定义,即使类路径配置正确,也无法被(require 'hello)正常加载。
  • 代码存在语法与拼写错误:
    • test.clj中引入路由模块时包名拼写错误:写为io.pedesteal.http.route,正确包路径为io.pedestal.http.route
    • 字符串值使用了全角中文弯引号、Herllo拼写错误,会触发语法解析失败
分步解决方法
  • 二选一匹配对应的REPL启动方式,确保类路径正确加载src目录:
    • 若继续使用Leiningen:在项目根目录创建project.clj配置文件,写入最小可用的项目定义:
      (defproject test "0.1.0"
        :source-paths ["src"]
        :dependencies [[io.pedestal/pedestal.service "0.5.7"]
                       [io.pedestal/pedestal.route "0.5.7"]
                       [io.pedestal/pedestal.jetty "0.5.7"]
                       [org.slf4j/slf4j-simple "1.7.28"]])
      
      保存后重新执行lein repl即可正常加载src下的命名空间。
    • 若沿用现有deps.edn配置:不再使用lein repl,直接在项目根目录执行clj命令启动REPL,该工具会自动读取deps.edn中的:paths配置将src目录加入类路径,与官方教程的配置逻辑完全一致。
  • 修正hello.clj的基础定义:在文件最开头添加对应的命名空间声明,调整后文件内容为:
    (ns hello)
    (defn respond-hello [request]
      {:status 200 :body "Hello world"})
    
    (同时修正全角引号、拼写错误的字符串内容)
  • 修正test.clj的拼写错误:将路由模块的引入路径改为正确的包名:
    (ns test
      (:require [io.pedestal.http :as http]
                [io.pedestal.http.route :as route]))
    

内容的提问来源于stack exchange,提问作者Jonas Fredriksson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.29 08:54:03