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

如何从本地另一个Leiningen项目中引入.clj文件?

在Leiningen同级项目间共享代码的问题

假设你用Leiningen在projects文件夹下创建了两个同级项目,分别执行lein new ping和lein new pong。在ping\src\ping\core.clj中实现了如下函数:

(defn plus 
  [x y]
  (+ x y))

尝试在pong项目的REPL中执行(require '[ping.core :as ping])时,出现FileNotFoundException错误,提示找不到相关文件。修改CLASSPATH环境变量(如set CLASSPATH=..\ping\src\ping\core.clj)也无效,请问是否必须将ping打包成JAR才能在pong中使用其函数?


不需要打包JAR就能解决

完全不用把ping打包成JAR,问题出在CLASSPATH的配置方式不对——你不该直接指向单个文件,而是要把ping项目的src目录加入CLASSPATH。另外Leiningen有更规范的本地依赖管理方式,不用手动改系统环境变量:

方法1:通过Leiningen配置本地依赖

在pong项目的project.clj里添加对ping的本地依赖:

(defproject pong "0.1.0-SNAPSHOT"
  :dependencies [[org.clojure/clojure "1.11.1"]
                 [ping "0.1.0-SNAPSHOT" :local/root "../ping"]])

配置好后,在pong项目目录下执行lein deps,再启动REPL,就能正常执行(require '[ping.core :as ping]),并调用(ping/plus 1 2)了。

方法2:启动REPL时手动指定CLASSPATH

如果不想修改project.clj,启动pong的REPL时可以直接把ping的src目录加入CLASSPATH:

# Windows系统
lein repl -cp "../ping/src"

# Linux/macOS系统
lein repl -cp "../ping/src"

这样启动的REPL就能找到ping.core命名空间,注意这里的路径是ping项目的src根目录,不是单个clj文件。

为什么直接改系统CLASSPATH没用?

Leiningen默认会忽略系统的CLASSPATH环境变量(除非你设置LEIN_USE_SYSTEM_CLASSPATH=true),它会自行构建项目专属的CLASSPATH,所以直接改系统CLASSPATH对Leiningen管理的项目无效。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 18:50:59