2024 年 Clojure 工作状态调查中分享您的想法!

欢迎!请查看 关于 页面了解更多关于该工作的信息。

0
工具
重新分类

在我的 deps.edn 中有两个别名

{
 :deps
 {
  org.clojure/spec.alpha {:mvn/version "0.2.194"}
  aleph/aleph {:mvn/version "0.4.7-alpha7"}
  hiccup/hiccup {:mvn/version "2.0.0-alpha2"}
  }

 :aliases 
 { 
  :web-server {
               :exec-fn web.network-service/run 
               :exec-args {:port 8080} 
               }
  :test-web-server { 
                    :exec-fn test.tnetwork-service/run 
                    :exec-args {:port 9090}
                    }
  }
 }

在调用时

clojure -X:web-server

我得到

Function not found: web.network-service/run

调用时一切正常

clojure -X:test-web-server

我不明白为什么会这样,Executive-funs 基本上都是一样的。请看完整代码: https://github.com/sidesteps/network-grid
在我的全局 deps.edn 中我有 :paths ["." "src"]

2 个答案

+1

选择
 
最佳答案

src/web/network_service.clj 中你有拼写错误

(ns web.netwok-service

缺少一个 r,因此命名空间与文件名不匹配,无法正确引入。

非常感谢您查看。真是尴尬。或许这应该是由 clojure cli pipeline 中的某个事物引起的咳嗽?
如果在 REPL 中尝试(这是我调试的方式),需要 requires web.network-service 并且它会找到一个匹配的文件,然后加载它,这会留下 web.netwok-service 作为已定义的命名空间。

在此处进行 require-resolve web.network-service/run 将会抛出异常 -- 并且 CLI 会告诉你请求的函数不存在。

我认为它可以在那里区分 nil 和异常,并在每种情况下提供不同的错误消息(nil 表示命名空间已加载但函数无法解析,异常表示命名空间加载失败:它缺失或存在语法错误)。
太好了!谢谢,Alex!
太棒了,谢谢。会在发布的错误修正版本中回滚测试。错误信息中显示了命名空间,这应该会把输错放在出错者的面前。
0

Clojure CLI (clojure --version)的哪个版本?

你尝试过使用-Sforce吗?

Clojure CLI版本1.10.3.933

感谢Sean Corfield,他发现exec-fn文件中ns声明存在一个拼写错误。我们正在考虑这可能是clojure cli捕捉到的。请查看Sean在其评论中的建议。
欢迎来到Clojure问答,你可以在这里提出问题,并从Clojure社区成员那里获得答案。
...