You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Clojure中src目录可使用require,core目录为何不行?

解决Clojure项目中core目录无法加载命名空间的问题

问题重现

项目结构:

fourth(项目文件夹)
└── core
    ├── core.clj
    └── mycore.clj

core.clj代码:

(ns core.core)

(require '[core.mycore :refer [myhello2]] :verbose)
(println "hi")

mycore.clj代码:

(ns core.mycore)

(defn myhello2 []
  (println "hi")
)

执行时出现错误:Could not locate mycore__init.class, mycore.clj or mycore.cljc on classpath,将core目录改为src则可正常运行,希望保留core目录并解决该问题。

解决方案

你之前在deps.edn中使用了错误的配置键,正确的配置应该是将core目录加入类路径,具体步骤如下:

  1. 修改项目根目录(fourth)下的deps.edn文件,内容改为:
{:paths ["core"]}

:paths是Clojure deps工具用来指定源文件目录的配置项,你之前用的:depths是无效配置键,因此没有效果。

  1. 在fourth目录下,使用以下命令运行程序:
clj -m core.core

直接运行单个.clj文件时,Clojure不会自动将core目录加入类路径;通过clj -m命令配合deps.edn的配置,就能正确加载core.mycore命名空间。

原理说明

Clojure的命名空间与文件路径一一对应:core.mycore命名空间对应core/mycore.clj文件。只有当包含该文件的父目录(即core目录)被加入类路径时,Clojure才能找到并加载这个文件。默认情况下,clj命令会自动将src目录加入类路径,所以改成src目录能正常运行;通过deps.edn的:paths配置,我们可以手动添加其他源目录到类路径中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 06:36:27