如何从本地另一个Leiningen项目调用Clojure函数
跨Leiningen项目调用函数的解决方案
方法一:开发阶段用Checkouts实时同步(推荐)
适合开发过程中需要频繁修改alpha项目代码,同时在beta中实时验证的场景:
- 在beta项目根目录创建
checkouts文件夹:mkdir checkouts - 建立指向alpha项目的软链接:
- Linux/macOS:进入beta的checkouts目录,执行
ln -s ../../alpha .(路径根据两个项目的实际相对位置调整,本文假设二者在同一父目录下) - Windows:执行
mklink /J beta\checkouts\alpha alpha
- Linux/macOS:进入beta的checkouts目录,执行
- 修改beta项目的
project.clj,在:dependencies中添加alpha的依赖,坐标必须和alpha项目project.clj里的配置完全一致,示例::dependencies [[org.clojure/clojure "1.11.1"] [alpha "0.1.0-SNAPSHOT"]] - 在beta的
src/beta/core.clj中引入并调用函数:(ns beta.core (:require [alpha.utils :as u])) (println (u/plus 2 3)) ; 运行后输出5
后续修改alpha的代码,beta无需重新安装依赖就能直接生效。
方法二:打包alpha到本地仓库(适合稳定版本依赖)
如果alpha的功能已经稳定,不需要频繁修改,可采用此方式:
- 进入alpha项目根目录,执行
lein install,该命令会把alpha的jar包安装到本地Maven仓库(默认路径为~/.m2/repository) - 修改beta项目的
project.clj,在:dependencies中添加alpha的依赖,坐标和alpha的project.clj保持一致,示例::dependencies [[org.clojure/clojure "1.11.1"] [alpha "0.1.0-SNAPSHOT"]] - 在beta的
src/beta/core.clj中引入调用函数,代码和方法一完全一致。
注意事项
- beta依赖的坐标(group、name、version)必须和alpha项目
project.clj中的defproject配置完全匹配,否则会出现依赖找不到的问题。 - 如果alpha项目包含第三方依赖,Leiningen会自动处理这些传递性依赖。
内容的提问来源于stack exchange,提问作者Jorge D
相关产品推荐
相关产品推荐

